Используя стандартные модули Apache, возможно запрашивать логин и пароль у пользователя при попытке доступа к определенной странице или каталогу. Доступ будет разрешен, если логин и пароль присутствуют в специальном файле.
1. Apache
Создание файла с паролями
Файл с учетными данными обычно называется .htpasswd и располагается в каталоге, доступ к которому необходимо ограничить. По умолчанию в Apache запрещен доступ ко всем файлам, которые начинаются на .ht, так что файл с паролями, как и файл .htaccess, не сможет быть прочитан ни одним посетителем вашего сайта.
В каждой строке файла хранятся данные об одном пользователе. Логин и зашифрованный пароль разделены двоеточием. Пример:
admin:YFC5nYLiUI2ig
vasya:bnqw1eZHP2Ujs
Для шифрации паролей применяется утилита htpasswd, которая поставляется в комплекте с Apache. Чтобы создать новый файл с данными о пользователе admin, введите команду:
$ htpasswd -c .htpasswd admin
Для добавления в уже существующий файл используется команда:
$ htpasswd .htpasswd vasya
После запуска, утилита попросит дважды ввести пароль и, если они совпадут, данные о пользователе будут добавлены.
Ограничение доступа
Теперь, чтобы включить запрос на авторизацию при попытке доступа, необходимо внести изменения в файл конфигурации или в файл .htaccess. Напоминаю, что использование файлов .htaccess нежелательно, так как снижает производительность сервера. Пример:
AuthType Basic
AuthName "Administrative zone"
AuthUserFile /var/www/example.com/admin/.htpasswd
Require valid-user
Вам необходимо будет изменить путь к каталогу (Directory), путь к файлу с паролями (AuthUserFile) и строку-приглашение (AuthName), которая выдается на экран пользователю при запросе пароля. Значение других директив вы можете узнать из документации Apache.
После внесения изменений в файл конфигурации, не забудьте перезагрузить Apache.
2. NGINX
Используя директивы auth_basic и auth_basic_user_file, можно ограничить доступ ко всему серверу, сайту, каталогу или любому URL по маске, с авторизацией по протоколу "HTTP Basic Authentication".
Формат файла со списком логинов и паролей такой же, как в Apache. Создание такого файла утилитой htpasswd подробно описано на странице: Apache: Простое ограничение доступа по паролю.
Добавьте в нужную секцию файла конфигурации две директивы:
location /admin/ {
auth_basic "Admin Zone";
auth_basic_user_file /var/www/example.com/admin/.htpasswd;
}
auth_basic задает имя ресурса (realm), которое будет показано посетителю в окне ввода пароля.
auth_basic_user_file — путь к файлу с логинами и паролями. Данные из файла считываются заново при каждом обращении посетителя к ресурсу.
Если необходимо, чтобы файл с паролями находился в каталоге, доступном посетителям, скрыть его от всех можно следующим кодом:
server {
listen 80;
server_name example.com;
location / {
...
}
location ~ /\.ht {
deny all;
}
}
Этот код скроет от посетителя все файлы, начинающиеся с ".ht", так же, как в конфигурации Apache по умолчанию.