Пароль на раздел сайта: basic auth в nginx
Закрыть паролем админку, staging-стенд или папку с отчётами можно без единой строчки кода — прямо в nginx через HTTP Basic Auth. Разбираем создание файла паролей, защиту нужного location, сочетание с HTTPS и ограничением по IP.
Содержание
Что такое basic auth и когда он уместен
['HTTP Basic Auth — простейший способ защиты: браузер показывает окно логина и пароля, а nginx пускает дальше только с верными данными. Это не замена полноценной авторизации приложения, но отличный барьер для того, что не должно быть публичным.', '- Staging и dev-стенды — чтобы тестовую версию не индексировали и не видели чужие.
- Технические разделы — phpMyAdmin, Adminer, панели мониторинга.
- Временная заглушка — закрыть сайт на время разработки.
Нужен сервер под эту задачу?
Разверните 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 {\n location /admin/ {\n auth_basic "Restricted Area";\n auth_basic_user_file /etc/nginx/.htpasswd;\n proxy_pass http://backend;\n }\n}', 'Чтобы закрыть весь сайт целиком, вынеси эти две строки в блок 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/\ncurl -I -u admin:пароль https://example.com/admin/', 'Первый запрос отдаст HTTP/1.1 401 Unauthorized и заголовок WWW-Authenticate, второй — уже содержимое. В браузере первый заход покажет окно ввода логина и пароля.']
Усиливаем защиту
['Basic auth хорошо комбинируется с ограничением по IP — так даже с паролем зайти можно только из доверенной сети. Директиваsatisfy управляет логикой: all требует выполнения обоих условий, any — любого.', 'location /admin/ {\n satisfy all;\n allow 203.0.113.0/24;\n deny all;\n auth_basic "Restricted";\n auth_basic_user_file /etc/nginx/.htpasswd;\n}', 'Здесь satisfy all означает: пустим только если запрос и с разрешённой подсети, и с верным паролем. Для офиса с фиксированным IP это надёжный двойной барьер. Если же нужен доступ либо из офиса без пароля, либо извне по паролю — ставь satisfy any.']
Частые ошибки
['- Auth без HTTPS — по HTTP пароль летит почти открытым; всегда включай TLS до basic auth.
- Флаг -c при добавлении — повторный
htpasswd -cстирает всех прежних пользователей. Для добавления — без -c. - Файл в DocumentRoot — если
.htpasswdлежит в публичной папке, его могут скачать. Держи вне корня сайта. - Забыли reload — правки конфига применяются только после перезагрузки nginx.
- Спецсимволы в пароле — при проверке через curl экранируй их или бери пароль в кавычки.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для закрытого разделаЧастые вопросы
Насколько безопасен basic auth?
Как барьер от случайного доступа и ботов — вполне достаточно, при условии HTTPS. Для защиты критичных данных лучше добавить ограничение по IP и полноценную авторизацию приложения.
Можно ли закрыть паролем только одну папку?
Да, директивы auth_basic ставятся в конкретный location — остальной сайт остаётся публичным.
Как убрать пароль с публичной страницы внутри закрытого раздела?
Во вложенном location для этой страницы укажи auth_basic off — защита снимется точечно, не затрагивая остальной раздел.