Для создания логина и пароля можно использовать утилиту htpasswd
из пакета apache2-utils
хорошо выполняет эту функцию.
Для установки apache2-utils
:
sudo apt update
sudo apt install apache2-utils
Теперь есть доступ к команде htpasswd
и можно использовать это для создания файла паролей, который Nginx может использовать для аутентификации пользователей. Создайте для этой цели скрытый файл с именем .htpasswd
в вашем каталоге конфигурации /etc/nginx
.
При первом использовании этой утилиты необходимо добавить параметр -c
для создания указанного файла. Укажите имя пользователя (в данном примере test
) в конце команды, чтобы создать новую запись в файле:
sudo htpasswd -c /etc/nginx/.htpasswd test
Будет предложено ввести и подтвердить пароль для пользователя test
Для последующего добавления пользователей в этот-же файл -c использовать не нужно.
sudo htpasswd /etc/nginx/.htpasswd test2
Вывод файла cat /etc/nginx/.htpasswd будет следующий:
test:$apr1$.KinUDGA$TvhvtRYlYlz24VHbRcXLI/
test2:$apr1$Sfi7G4dc$zWnuctM7Ju4GAWSfaNzls/
Чтобы настроить аутентификацию, вам нужно выбрать контекст для ограничения. Помимо прочего, Nginx
позволяет вам устанавливать ограничения на уровне сервера или внутри определенного места.
Этот пример будет для ограничения на уровне сервера. Директива auth_basic
включает аутентификацию и имя области, которое будет отображаться пользователю при запросе учетных данных.
Вы будете использовать директиву auth_basic_user_file
, чтобы указать Nginx
на созданный вами файл паролей:
server {
listen 80 default_server;
. . .
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
}
В зависимости от того, в каком блоке вы размещаете ограничения, вы можете контролировать степень детализации того, какие части вашего сайта требуют пароля. Этот альтернативный пример ограничивает только корень /
документа блоком местоположения. Тоесть другими словами вы можете указать конкретный каталог на который нужно ограничить доступ:
server {
listen 80 default_server;
. . .
location / {
try_files $uri $uri/ =404;
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
Сохраните и закройте файл, когда закончите. Перезагрузите nginx
.
sudo systemctl restart nginx
Если на вашем сервере установлен OpenSSL
, вы можете создать файл паролей без дополнительных пакетов.
Cоздайте скрытый файл с именем .htpasswd
в каталоге конфигурации /etc/nginx
для хранения комбинаций имени пользователя и пароля.
Вы можете добавить имя пользователя test в файл с помощью этой команды:
sudo sh -c "echo -n 'test:' >> /etc/nginx/.htpasswd"
Затем добавьте зашифрованный пароль для имени пользователя, набрав:
sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"
или вот еще 1-ин вариант
printf "$USER:$(openssl passwd -crypt $PASS)\n" >> .htpasswd
echo 'user:'`openssl passwd -apr1 test`