Home » Настройка аутентификации по паролю в Nginx на Ubuntu 24.04
Настройка аутентификации по паролю в Nginx на Ubuntu 24.04

Настройка аутентификации по паролю в 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).

Как быстро и просто всё настроить?

Погнали по шагам, без лишней воды.

  1. Установить нужные утилиты


    sudo apt update
    sudo apt install nginx apache2-utils


    apache2-utils нужен только ради htpasswd.
  2. Создать файл с паролями


    sudo htpasswd -c /etc/nginx/.htpasswd admin


    -c — создать новый файл (использовать только для первого пользователя, иначе перезапишет файл!).
    Для добавления ещё одного пользователя:


    sudo htpasswd /etc/nginx/.htpasswd user2
  3. Настроить Nginx

    Открываем нужный server или location блок:


    location /secret/ {
      auth_basic "Restricted Area";
      auth_basic_user_file /etc/nginx/.htpasswd;
    }


    Можно защитить весь сайт, если прописать это в server { ... }.
  4. Проверить конфиг и перезапустить 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. Для серьёзных задач — выделенный сервер. А если остались вопросы — смело спрашивайте в комментариях, всегда рад помочь!

Официальная документация по теме:


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked