Глава 7: Волшебные файлы Apache: .htaccess и виртуальные хосты
7.1 Файл .htaccess — карманный маг для папки
Файл .htaccess (hypertext access) — это специальный конфигурационный файл Apache. Его сила в том, что он действует на папку, в которой лежит, и на все вложенные папки. Это как табличка с правилами, которую ты вешаешь на дверь конкретной комнаты.
Создадим первый .htaccess для запрета просмотра содержимого папок.
Бывало ли, что при переходе по ссылке типа site.ru/images/ ты видел не красивую галерею, а простой список файлов? Это опасно — все видят структуру твоего сайта.
Создай файл в корне сайта:
cd /var/www/html sudo nano .htaccess(Обрати внимание на точку в начале имени — такие файлы скрытые).
Вставь в него самую важную директиву:
# Запрещаем автоматическое создание списка файлов при отсутствии index.html Options -Indexes # Если посетитель попал в папку без index.html — показываем ошибку 403 (Доступ запрещён) # Это безопаснее и выглядит профессиональнее, чем список файлов.Сохрани файл (
Ctrl+O,Enter,Ctrl+X).Проверь: В браузере перейди по адресу
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: Проверяем.
Создай в папке
adminтестовый файлindex.htmlс текстом "Секретная зона!".В браузере перейди по адресу
http://ТВОЙ_IP/admin/.Появится стандартное окошко браузера с запросом логина и пароля. Введи
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:
Обязательная защита: Создай файл
.htaccessв корне сайта с директивойOptions -Indexes. Проверь, что доступ к папкам/images/и/docs/теперь закрыт.Секретная зона: Создай папку
/stats/, защити её паролем с помощью.htaccessи.htpasswd. Положи туда простой HTML-файл с заголовком "Статистика сайта".Вирутальный хост-тренировка: Создай тестовый виртуальный хост
test.localи размести в нём одностраничный сайт-визитку о своём хобби. Научись переключаться между основным сайтом и тестовым.
Вывод главы: Ты перешёл на новый уровень контроля. Теперь ты не только автор контента, но и администратор, который умеет:
Управлять доступом (открывать/закрывать папки для локальной сети).
Защищать конфиденциальные разделы паролем.
Создавать сложные структуры с несколькими независимыми сайтами на одном сервере.
Твой сервер из "игрушки" превращается в инструмент.
Последнее обновление