Расскажу про использование директивы auth_basic
для включения/отключения базовой аутентификации в nginx.
Как она работает, и что может заставить её работать не так, как вы ожидаете.
Как это работает и для чего вообще нужно?
Часто бывают случаи, когда нужно обернуть веб-сервер в дополнительный слой защиты, которым может стать базовая http аутентификация.
По сути вся базовая http аутентификация заключается в добавлении клиентом к запросу хедера Authorization
со строкой Basic $credentials
, где $credentials
это закодированные в base64 логин и пароль
в формате login:password
. Пример полного хедера: Authorization: Basic YWRtaW46dGVzdA==
.
В случае, если клиент пользуется веб браузером для получения доступа к ресурсам, то ему браузер предложит ввести пароль в специальное окно.
После ввода браузер запомнит учетные данные для этого сайта и в запросы всех остальных ресурсов будет автоматически
помещать логин и пароль, ко торые вы ввели при заходе. Но если на один из запросов вернётся статус код 401 Unauthorized
– придётся вводить логин и пароль заново.
Как этим пользоваться в nginx?
Для того, чтобы включить базовую аутентификацию в nginx для всего виртуального сервера достаточно в контекст server
добавить следующие директивы:
auth_basic "auth"; # обозначает защищаемую область.
# Также должен выводиться пользователю в окне ввода
# логина и пароля, но лично ни разу такого не видел)
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
В auth_basic_user_file
нужно указать путь до файла, в котором будут указаны учетные данные для доступа. Файл должен
быть создан при помощи утилиты htpasswd от Apache.