Привет, любители почитать бесполезную информацию!
Недавно мне понадобилось добавить базовую защиту на один из своих поддоменов через Nginx. Не то чтобы там что-то важное и вряд ли вообще это кого-то заинтересует. Но чтобы добавить хоть какой-то секурности, решил настроить парольную авторизацию на нем.
Конечно-же у меня есть AFFiNE, где я храню свои инструкции, но мало ли кому-то она еще пригодится 🙂
Когда полез настраивать, все оказалось довольно просто — для парольной защиты используется утилита htpasswd, которая обычно идёт с apache2-utils.
Устанавливаем эти утилиты на ubuntu:
sudo apt update
sudo apt install apache2-utils
При первом запуске нужно добавить флаг -c, чтобы создать файл с паролями. Например, я создал пользователя test:
sudo htpasswd -c /etc/nginx/.htpasswd test
После этого система попросит ввести и подтвердить пароль. Когда добавляете новых пользователей, -c больше не нужен, иначе файл перезапишется:
sudo htpasswd /etc/nginx/.htpasswd another_user
Если заглянуть в файл при помощи команды cat
cat /etc/nginx/.htpasswd
Увидите примерно такую картину:
username:password_hash
Затем нам нужно настроить Nginx так, чтобы он проверял эти пароли. Я открыл конфиг сервера при помощи редактора nano (у вас файл может называться по другому):
sudo nano /etc/nginx/sites-enabled/default
И внес такие изменения в конфигурацию:
Директива auth_basic включает проверку пароля, а auth_basic_user_file указывает на файл с учетками. Например, можно защитить весь сервер:
server {
listen 80 default_server;
...
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
}
Или только определённый каталог через location:
server {
listen 80 default_server;
...
location / {
try_files $uri $uri/ =404;
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
Когда внес изменения, сохраняем файл и проверяем конфиг:
nginx -t
sudo systemctl reload nginx
Теперь выбранный каталог защищён паролем. На практике такое лучше использовать исключительно на тестовых страницах или страницах, где нет ничего важного…
