Пароль на раздел сайта: basic auth в nginx
Закрыть паролем админку, staging-стенд или папку с отчётами можно без единой строчки кода — прямо в nginx через HTTP Basic Auth. Разбираем создание файла паролей, защиту нужного location, сочетание с HTTPS и ограничением по IP.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое basic auth и когда он уместен
HTTP Basic Auth — простейший способ защиты: браузер показывает окно логина и пароля, а nginx пускает дальше только с верными данными. Это не замена полноценной авторизации приложения, но отличный барьер для того, что не должно быть публичным.
- Staging и dev-стенды — чтобы тестовую версию не индексировали и не видели чужие.
- Технические разделы — phpMyAdmin, Adminer, панели мониторинга.
- Временная заглушка — закрыть сайт на время разработки.
Ключевое правило: basic auth передаёт пароль в почти открытом виде (base64), поэтому работать он должен только поверх HTTPS — иначе пароль перехватывается в сети.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS для закрытого разделаСоздаём файл паролей
Пары логин-пароль хранятся в файле формата .htpasswd, где пароль зашифрован. Создать его удобнее всего утилитой htpasswd из пакета apache2-utils.
sudo apt update && sudo apt -y install apache2-utils
Создаём файл и первого пользователя. Флаг -c создаёт файл (используй его только для первого пользователя, иначе файл перезапишется).
sudo htpasswd -c /etc/nginx/.htpasswd admin
Утилита спросит пароль дважды. Добавить ещё пользователей — той же командой, но без -c.
sudo htpasswd /etc/nginx/.htpasswd editor
Проверь содержимое: каждая строка — логин:хеш. Файл держи вне DocumentRoot, чтобы его нельзя было скачать через веб.
Защищаем location
Сама защита включается двумя директивами: auth_basic (текст в окне логина) и auth_basic_user_file (путь к файлу паролей). Их ставят в нужный server, location или даже отдельный URL.
server {
location /admin/ {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://backend;
}
}
Чтобы закрыть весь сайт целиком, вынеси эти две строки в блок server вне location — тогда пароль спросят на любой странице. А значение auth_basic off; внутри вложенного location снимает защиту точечно, например для публичного /admin/login.
Проверяем и перезагружаем
После правки — обязательная проверка синтаксиса и перезагрузка nginx.
sudo nginx -t && sudo systemctl reload nginx
Проверить защиту можно curl-ом. Без данных сервер вернёт 401, с верными — 200.
curl -I https://example.com/admin/
curl -I -u admin:пароль https://example.com/admin/
Первый запрос отдаст HTTP/1.1 401 Unauthorized и заголовок WWW-Authenticate, второй — уже содержимое. В браузере первый заход покажет окно ввода логина и пароля.
Усиливаем защиту
Basic auth хорошо комбинируется с ограничением по IP — так даже с паролем зайти можно только из доверенной сети. Директива satisfy управляет логикой: all требует выполнения обоих условий, any — любого.
location /admin/ {
satisfy all;
allow 203.0.113.0/24;
deny all;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
Здесь satisfy all означает: пустим только если запрос и с разрешённой подсети, и с верным паролем. Для офиса с фиксированным IP это надёжный двойной барьер. Если же нужен доступ либо из офиса без пароля, либо извне по паролю — ставь satisfy any.
Частые ошибки
- Auth без HTTPS — по HTTP пароль летит почти открытым; всегда включай TLS до basic auth.
- Флаг -c при добавлении — повторный
htpasswd -cстирает всех прежних пользователей. Для добавления — без -c. - Файл в DocumentRoot — если
.htpasswdлежит в публичной папке, его могут скачать. Держи вне корня сайта. - Забыли reload — правки конфига применяются только после перезагрузки nginx.
- Спецсимволы в пароле — при проверке через curl экранируй их или бери пароль в кавычки.
Basic auth закрывает раздел за минуту и не требует ресурсов. Держать такой закрытый стенд удобно на отдельном недорогом VPS — на тарифах MAATRIX от $8/мес с root-доступом это разворачивается за вечер, а оплатить можно картой РФ, СБП или криптой.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS для закрытого разделаОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Насколько безопасен basic auth?
Как барьер от случайного доступа и ботов — вполне достаточно, при условии HTTPS. Для защиты критичных данных лучше добавить ограничение по IP и полноценную авторизацию приложения.
Можно ли закрыть паролем только одну папку?
Да, директивы auth_basic ставятся в конкретный location — остальной сайт остаётся публичным.
Как убрать пароль с публичной страницы внутри закрытого раздела?
Во вложенном location для этой страницы укажи auth_basic off — защита снимется точечно, не затрагивая остальной раздел.