Часто при создании сайта возникает потребность закрыть какую-то его часть, например панель управления, или создать иной скрытый раздел, доступ к которому должен быть только у ряда лиц. В этом руководстве я расскажу, как настроить доступ по паролю к различным директориям и файлам на веб-сервере Apache.
Полагаю у вас уже установлены утилиты для Apache, если нет – установите их с помощью команды:
sudo apt-get install apache2-utils
В этот пакет входит утилита httpasswd, которая нам понадобится для создания паролей.
Создадим файл с паролем для пользователя admin:
sudo htpasswd -c /etc/apache2/.htpasswd admin
После выполнения команды нам будет предложено два раза ввести пароль.
Проверить, создался ли пароль, можно при помощи команды:
cat /etc/apache2/.htpasswd
На экран будет выведен пароль в зашифрованном виде:
admin:$apr1$SBeKUbvA$gAPTJgE0JqBiAGK2tl5041
Теперь, когда у нас есть пароль в том виде, в котором его сможет прочесть Apache 2, можно приступать к настройке.
Откроем конфигурационный файл хоста на котором работает наш сайт:
sudo nano /etc/apache2/sites-enabled/000-default.conf
После строки CustomLog ${APACHE_LOG_DIR}/access.log combined
вставим следующий код:
<Directory "/var/www/html">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
После /var/www/html
вы можете указать путь к любой директории на сайте, или же к определенному файлу, которые необходимо закрыть паролем. Если оставить как есть, пароль будет запрашиваться сразу при доступе ко всему сайту.
Сохраните файл комбинацией Ctrl+X и выходите из редактора.
Проверяем конфигурационный файл на валидность:
sudo apache2ctl configtest
Если все в порядке – перезапускаем Apache:
sudo service apache2 restart
Чтобы проверить, заработал ли доступ по паролю, достаточно просто перейти по домену или IP-адресу по заданному в конфигурации пути. Если всё сделано правильно, то при открытии страницы будет выведено всплывающее окно, запрашивающее логин и пароль. При введении верных учетных данных должно будет открыться содержимое, в противном случае сервер выдаст ошибку 401.