MAATRIX / Блог / Пароль на раздел сайта: basic auth в nginx

Пароль на раздел сайта: basic auth в nginx

Блог MAATRIX · 2026-07-07

Закрыть паролем админку, staging-стенд или папку с отчётами можно без единой строчки кода — прямо в nginx через HTTP Basic Auth. Разбираем создание файла паролей, защиту нужного location, сочетание с HTTPS и ограничением по IP.

Что такое 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 {\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 экранируй их или бери пароль в кавычки.
', 'Basic auth закрывает раздел за минуту и не требует ресурсов. Держать такой закрытый стенд удобно на отдельном недорогом VPS — на тарифах MAATRIX от $8/мес с root-доступом это разворачивается за вечер, а оплатить можно картой РФ, СБП или криптой.']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS для закрытого раздела

Частые вопросы

Насколько безопасен basic auth?

Как барьер от случайного доступа и ботов — вполне достаточно, при условии HTTPS. Для защиты критичных данных лучше добавить ограничение по IP и полноценную авторизацию приложения.

Можно ли закрыть паролем только одну папку?

Да, директивы auth_basic ставятся в конкретный location — остальной сайт остаётся публичным.

Как убрать пароль с публичной страницы внутри закрытого раздела?

Во вложенном location для этой страницы укажи auth_basic off — защита снимется точечно, не затрагивая остальной раздел.