- Home »

Настройка аутентификации по паролю в Nginx на Ubuntu 24.04
В этой статье разберёмся, как быстро и надёжно прикрутить аутентификацию по паролю к Nginx на свежей Ubuntu 24.04. Почему это важно? Потому что иногда хочется закрыть доступ к какому-нибудь разделу сайта или админке, не заморачиваясь с OAuth, LDAP и прочими монстрами. Аутентификация по паролю — это тот самый “быстрый щит”, который можно поставить за пару минут, чтобы не пускать посторонних. Разберёмся, как это работает, как всё настроить, какие есть нюансы и подводные камни, а также поделюсь парой лайфхаков и кейсов из жизни. Всё — простым языком, но без магии и упрощений.
Как это работает?
Nginx умеет защищать любые ресурсы с помощью базовой HTTP-аутентификации (Basic Auth). Это когда браузер сам показывает окошко “введите логин и пароль”, а сервер сверяет введённые данные с тем, что хранится в специальном файле. Всё просто: если пароль не подошёл — 401 Unauthorized, если подошёл — добро пожаловать.
Вся магия крутится вокруг двух директив в конфиге Nginx:
- auth_basic — включает защиту и задаёт текст для окна ввода пароля.
- auth_basic_user_file — указывает путь к файлу с паролями (обычно .htpasswd).
Файл .htpasswd — это обычный текстовый файл, где каждая строка: username:хэш_пароля
. Nginx не хранит пароли в открытом виде, только хэши (чаще всего bcrypt или SHA-1). Для генерации такого файла есть утилита htpasswd
(из пакета apache2-utils).
Как быстро и просто всё настроить?
Погнали по шагам, без лишней воды.
-
Установить нужные утилиты
sudo apt update
sudo apt install nginx apache2-utils
apache2-utils нужен только радиhtpasswd
. -
Создать файл с паролями
sudo htpasswd -c /etc/nginx/.htpasswd admin
-c — создать новый файл (использовать только для первого пользователя, иначе перезапишет файл!).
Для добавления ещё одного пользователя:
sudo htpasswd /etc/nginx/.htpasswd user2
-
Настроить Nginx
Открываем нужныйserver
илиlocation
блок:
location /secret/ {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
Можно защитить весь сайт, если прописать это вserver { ... }
. -
Проверить конфиг и перезапустить Nginx
sudo nginx -t
sudo systemctl reload nginx
Всё! Теперь при заходе на /secret/
браузер спросит логин и пароль.
Примеры, схемы, практические советы
Давайте рассмотрим пару кейсов из жизни, чтобы понять, где Basic Auth рулит, а где лучше поискать что-то посерьёзнее.
Кейс | Плюсы | Минусы | Рекомендации |
---|---|---|---|
Закрыть тестовый сайт от индексации | Мгновенно, не требует кода, не палится поисковикам | Нет гибкой настройки, только общий пароль | Идеально подходит |
Админка на проде | Быстро, просто, можно комбинировать с другими методами | Нет журналирования, нет 2FA, пароли могут утечь | Использовать как дополнительный слой защиты |
API для мобильного приложения | Легко реализовать, поддерживается всеми клиентами | Пароль передаётся в base64 (не шифрует!), нужен HTTPS | Только через HTTPS, лучше JWT или OAuth2 |
Ограничить доступ по IP | Можно комбинировать с Basic Auth | IP может меняться, неудобно для мобильных | Использовать вместе для особо важных зон |
Практические советы:
- Всегда используйте HTTPS! Basic Auth гоняет пароли в base64, а не шифрует их.
- Не храните .htpasswd в папках, доступных из веба.
- Меняйте пароли регулярно, особенно если доступ даёте сторонним.
- Для автоматизации можно генерировать .htpasswd скриптами (см. ниже).
- Если пользователей много — подумайте о более продвинутых решениях (LDAP, JWT, Keycloak).
Положительные и отрицательные кейсы
Положительный: Нужно быстро закрыть staging-сайт от глаз заказчика и поисковиков. За 2 минуты ставим Basic Auth — и всё, никто не зайдёт без пароля. Не надо лезть в код, менять роуты, городить костыли.
Отрицательный: Дали доступ подрядчику, а он слил пароль в публичный чат. Все, кто увидел — могут зайти. Нет журналов, кто когда заходил. Нет ограничения по IP. Для критичных зон — только как дополнительная защита.
Команды и автоматизация
Вот полный список команд для быстрой настройки:
sudo apt update
sudo apt install nginx apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd admin
sudo nano /etc/nginx/sites-available/your-site.conf
# Добавить в нужный location:
# auth_basic "Restricted Area";
# auth_basic_user_file /etc/nginx/.htpasswd;
sudo nginx -t
sudo systemctl reload nginx
Для автоматизации (например, в bash-скрипте для CI/CD):
#!/bin/bash
USER="deploy"
PASS="supersecret"
htpasswd -b -c /etc/nginx/.htpasswd $USER $PASS
htpasswd поддерживает разные алгоритмы хэширования. По умолчанию — bcrypt (безопасно). Можно явно указать -B
для bcrypt или -s
для SHA-1.
Похожие решения, программы и утилиты
- htpasswd — стандарт для Apache/Nginx, простой и надёжный.
- htdigest — для Digest Auth (более защищён, но сложнее в настройке, не все браузеры поддерживают).
- ngx_http_auth_request_module — позволяет делать аутентификацию через внешний сервис (например, через скрипт на Python или Go).
- OpenResty — расширяет Nginx, можно писать свои модули для аутентификации на Lua.
- Keycloak, Auth0, OAuth2 Proxy — для сложных сценариев и SSO.
Официальная документация Nginx по Basic Auth: https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html
Статистика и сравнение с другими решениями
Метод | Сложность | Безопасность | Гибкость | Подходит для |
---|---|---|---|---|
Basic Auth (.htpasswd) | Очень низкая | Средняя (только с HTTPS) | Минимальная | Тестовые сайты, быстрые решения |
Digest Auth (.htdigest) | Средняя | Выше (пароль не передаётся в явном виде) | Минимальная | Редко используется, не все клиенты поддерживают |
JWT, OAuth2 Proxy | Высокая | Очень высокая | Максимальная | API, корпоративные порталы |
IP Whitelist | Низкая | Средняя | Минимальная | Внутренние сервисы |
Интересные факты и нестандартные способы использования
- Можно использовать Basic Auth для временного ограничения доступа к сайту во время миграций или обновлений — просто добавьте пару строк в конфиг и уберите после работ.
- Можно генерировать .htpasswd на лету в CI/CD пайплайне, чтобы каждый деплой имел уникальный пароль (например, для тестовых стендов).
- Можно комбинировать Basic Auth с GeoIP — например, разрешать доступ только из определённых стран и только по паролю.
- Можно использовать auth_request модуль для интеграции с внешними сервисами (например, Telegram-ботом для выдачи одноразовых паролей).
Новые возможности и автоматизация
Basic Auth отлично ложится в автоматизацию. Например, можно:
- Генерировать пароли для тестовых стендов прямо в пайплайне (Jenkins, GitLab CI).
- Давать временный доступ подрядчикам, а потом просто удалять пользователя из .htpasswd.
- Использовать в скриптах для защиты внутренних API (curl поддерживает Basic Auth из коробки).
- Быстро ограничивать доступ к новым сервисам, пока не готова полноценная авторизация.
Вывод — заключение и рекомендации
Аутентификация по паролю через Nginx — это быстрый, надёжный и проверенный временем способ закрыть доступ к любым ресурсам. Она не заменяет полноценную авторизацию, но отлично работает как временное или дополнительное решение. Если нужно быстро закрыть тестовый сайт, админку или внутренний API — Basic Auth ваш друг. Главное — всегда используйте HTTPS, не храните пароли в публичных местах и не забывайте про регулярную смену паролей.
Для сложных сценариев (много пользователей, интеграция с внешними сервисами, SSO) — смотрите в сторону OAuth2 Proxy, Keycloak или кастомных решений через auth_request
модуль.
Если нужен VPS для экспериментов — заказать VPS. Для серьёзных задач — выделенный сервер. А если остались вопросы — смело спрашивайте в комментариях, всегда рад помочь!
Официальная документация по теме:
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.