Авторизация на nginx — auth_basic
Иногда нужно закрыть сервис от посторонних глаз — не писать полноценную авторизацию, а просто добавить логин и пароль на уровне nginx. Это называется HTTP Basic Authentication.
Как это работает
Когда заходишь на защищённый URL, браузер показывает стандартное системное окно с полями «Имя пользователя» и «Пароль» — это не кастомная страница, а встроенное поведение браузера. Логин/пароль проверяет сам nginx по файлу .htpasswd.
Установка утилиты
Для создания файла паролей нужна утилита htpasswd из пакета apache2-utils:
apt install apache2-utils
Создание файла паролей
Создаём файл и добавляем первого пользователя:
htpasswd -c /etc/nginx/.htpasswd username
Флаг -c создаёт файл. Если файл уже есть и нужно добавить ещё одного пользователя — без -c:
htpasswd /etc/nginx/.htpasswd username2
Посмотреть содержимое файла:
cat /etc/nginx/.htpasswd
# username:$apr1$xyz...$hashedpassword
Пароли хранятся в хешированном виде — открытым текстом не лежат.
Настройка nginx
Добавляем в нужный location или весь server блок:
server {
listen 443 ssl;
server_name service.example.com;
location / {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://127.0.0.1:8080;
}
}
auth_basic— текст заголовка который браузер показывает в окне входа. Можно написать любой, например"Admin Panel"или"Private". Именно его видно над полями логина и пароля.auth_basic_user_file— путь к файлу с логинами и паролями.
Закрыть только часть сайта
Если нужно закрыть не весь сайт, а конкретный путь:
location /admin/ {
auth_basic "Admin area";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://127.0.0.1:8080;
}
Применить изменения
nginx -t && systemctl reload nginx
Удалить пользователя
htpasswd -D /etc/nginx/.htpasswd username
Важно
HTTP Basic Auth передаёт логин и пароль в base64. Это не шифрование — поэтому использовать только поверх HTTPS. Без SSL — пароль виден в трафике.