7 Май, 2016

Nginx: Простое ограничение доступа по паролю

Используя директивы auth_basic и auth_basic_user_file, можно ограничить доступ ко всему серверу, сайту, каталогу или любому URL по маске, с авторизацией по протоколу «HTTP Basic Authentication».

Для начала создадим файл .htpasswd со списком логинов и паролей, но перед этим установим apache2-utils:

apt-get install apache2-utils

Формат файла со списком логинов и паролей такой же, как в Apache. Создание такого файла утилитой htpasswd. Чтобы создать новый файл с данными о пользователе admin, введите команду:

htpasswd -c .htpasswd admin

Для добавления в уже существующий файл используется команда:

htpasswd .htpasswd kirill

После запуска, утилита попросит дважды ввести пароль и данные о пользователе будут добавлены.

Откроем файл конфигурации сайта в nginx и внесем запись в секцию server:

location /admin/ {
auth_basic «Administrator Zone»;
auth_basic_user_file /var/www/example.com/admin/.htpasswd;
}

auth_basic задает имя ресурса, которое будет показано посетителю в окне ввода пароля. auth_basic_user_file — путь к файлу с логинами и паролями. Данные из файла считываются заново при каждом обращении посетителя к ресурсу. Разместим файл .htpasswd в заданном каталоге и скроем его от глаз посетителей:

server {
listen 80;
server_name example.com;
location / {

}
location ~ /\.ht {
deny all;
}
}

Этот код скроет от посетителя все файлы, начинающиеся с «.ht», так же, как в конфигурации Apache по умолчанию.

Модуль ngx_http_auth_basic_module