Используя стандартные модули 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 по умолчанию.