Глава 7: Волшебные файлы Apache: .htaccess и виртуальные хосты

7.1 Файл .htaccess — карманный маг для папки

Файл .htaccess (hypertext access) — это специальный конфигурационный файл Apache. Его сила в том, что он действует на папку, в которой лежит, и на все вложенные папки. Это как табличка с правилами, которую ты вешаешь на дверь конкретной комнаты.

Создадим первый .htaccess для запрета просмотра содержимого папок.

Бывало ли, что при переходе по ссылке типа site.ru/images/ ты видел не красивую галерею, а простой список файлов? Это опасно — все видят структуру твоего сайта.

  1. Создай файл в корне сайта:

    cd /var/www/html
    sudo nano .htaccess

    (Обрати внимание на точку в начале имени — такие файлы скрытые).

  2. Вставь в него самую важную директиву:

    # Запрещаем автоматическое создание списка файлов при отсутствии index.html
    Options -Indexes
    
    # Если посетитель попал в папку без index.html — показываем ошибку 403 (Доступ запрещён)
    # Это безопаснее и выглядит профессиональнее, чем список файлов.
  3. Сохрани файл (Ctrl+O, Enter, Ctrl+X).

  4. Проверь: В браузере перейди по адресу http://ТВОЙ_IP/images/. Теперь вместо списка файлов ты должен увидеть страницу с ошибкой "403 Forbidden" или "Access denied". Отлично! Ты только что закрыл "окно" в структуре своих файлов.

7.2 Защита паролем отдельной панели

Допустим, у тебя в папке /var/www/html/admin/ лежит секретная панель управления (admin.html). Мы хотим, чтобы доступ к ней был только по паролю.

Шаг 1: Создаём файл с логинами и паролями. Мы создадим файл .htpasswd ВНЕ корня сайта, чтобы к нему нельзя было получить доступ из браузера.

  • Тебя попросят ввести и подтвердить пароль для пользователя admin. Запомни его!

  • Флаг -c создаёт файл заново. Чтобы добавить второго пользователя, используй команду БЕЗ -c: sudo htpasswd /etc/apache2/secure/.htpasswd user2.

Шаг 2: Настраиваем .htaccess в защищаемой папке.

Вставь в файл:

  • AuthName — это название зоны, которое увидит пользователь в окне ввода пароля.

Шаг 3: Проверяем.

  1. Создай в папке admin тестовый файл index.html с текстом "Секретная зона!".

  2. В браузере перейди по адресу http://ТВОЙ_IP/admin/.

  3. Появится стандартное окошко браузера с запросом логина и пароля. Введи admin и тот пароль, который задал.

Доступ открыт! Без пароля никто не увидит содержимое папки /admin/ и всех вложенных папок.

7.3 Создание "секретной" страницы для настройки сервиса

Иногда нужна страница, которая вообще не видна в навигации, но доступна по прямому URL. Например, страница для мониторинга состояния сервера или настройки домашней автоматизации.

Способ 1: Просто положить файл в "секретную" папку. Мы уже умеем это делать. Просто создай папку с неочевидным названием:

Теперь страница доступна по прямому URL: http://ТВОЙ_IP/internal-monitoring-9f3s7d/. Её нет в меню, и никто не найдёт её, если не знать точный адрес. Для надёжности добавь в эту папку .htaccess с паролем!

Способ 2: Запретить доступ по IP, но разрешить только с локального компьютера (с сервера). Отредактируй .htaccess в секретной папке:

Эти правила запрещают доступ всем (Deny from all), кроме локального хоста (127.0.0.1 и ::1 — это IPv6-адрес localhost). Теперь страницу можно открыть только с самого сервера, введя в терминале команду lynx http://localhost/internal-monitoring-9f3s7d/ (предварительно установив текстовый браузер lynx).

7.4 Виртуальные хосты: несколько разных сайтов на одном сервере

Сейчас Apache отдаёт всё содержимое папки /var/www/html по любому запросу к IP-адресу сервера. Но что, если мы хотим разместить на одном сервере два полностью независимых сайта? Например, mysite.local и myproject.local?

Это делается с помощью виртуальных хостов (vhosts).

Шаг 1: Отключаем дефолтный сайт.

Эта команда отключает конфигурацию сайта по умолчанию, который сейчас отвечает с папки /var/www/html.

Шаг 2: Создаём структуру папок для двух сайтов.

public_html — это новая корневая папка для каждого сайта.

Шаг 3: Создаём конфигурационные файлы виртуальных хостов. Сначала создаём конфиг для первого сайта:

Вставляем содержимое:

Аналогично создаём файл /etc/apache2/sites-available/myproject.local.conf, меняя в нём mysite на myproject.

Шаг 4: Включаем новые сайты и перезапускаем Apache.

Шаг 5: Прописываем имена в файле hosts на своём компьютере. Пока что только твой компьютер будет знать, что mysite.local — это твой сервер.

  • На Windows: Открой файл C:\Windows\System32\drivers\etc\hosts от имени Администратора. Добавь строку: 192.168.1.105 mysite.local myproject.local.

  • На macOS/Linux: sudo nano /etc/hosts и добавь такую же строку.

Шаг 6: Создаём тестовые index.html в папках каждого сайта (с разным текстом, чтобы видеть разницу) и проверяем в браузере:

  • http://mysite.local — покажет содержимое первого сайта.

  • http://myproject.local — покажет содержимое второго сайта.

Магия: Один сервер, один IP-адрес, но два абсолютно независимых сайта с разными конфигурациями и логами!


Практическое задание к главе 7:

  1. Обязательная защита: Создай файл .htaccess в корне сайта с директивой Options -Indexes. Проверь, что доступ к папкам /images/ и /docs/ теперь закрыт.

  2. Секретная зона: Создай папку /stats/, защити её паролем с помощью .htaccess и .htpasswd. Положи туда простой HTML-файл с заголовком "Статистика сайта".

  3. Вирутальный хост-тренировка: Создай тестовый виртуальный хост test.local и размести в нём одностраничный сайт-визитку о своём хобби. Научись переключаться между основным сайтом и тестовым.

Вывод главы: Ты перешёл на новый уровень контроля. Теперь ты не только автор контента, но и администратор, который умеет:

  • Управлять доступом (открывать/закрывать папки для локальной сети).

  • Защищать конфиденциальные разделы паролем.

  • Создавать сложные структуры с несколькими независимыми сайтами на одном сервере.

Твой сервер из "игрушки" превращается в инструмент.

Последнее обновление