Обновить настройки cookies

Как защитить каталог сайта паролем с помощью файла .htpasswd в Nginx

04 Jun 2025, 19:58:53
Веб-сервер Nginx не использует .htaccess, как Apache, но всё же поддерживает базовую HTTP-аутентификацию с помощью файлов .htpasswd. Это простой способ ограничить доступ к разделам сайта с помощью логина и пароля.

Что такое .htpasswd?

.htpasswd — это текстовый файл, в котором хранятся имена пользователей и их зашифрованные пароли. Этот файл используется для реализации базовой HTTP-аутентификации: когда пользователь пытается открыть защищённую страницу, браузер требует ввести логин и пароль. Если введённые данные не совпадают с записями в .htpasswd, доступ будет отклонён.
20250605_O6iqKGh3

Создание файла .htpasswd

Самый простой способ создать файл .htpasswd - воспользоваться утилитой htpasswd, входящей в состав пакета Apache-utils или httpd-tools.
htpasswd -c /etc/nginx/.htpasswd admin
  • -c - создать новый файл. Не используйте этот флаг если в файле уже есть добавленные пользователи, иначе они будут перезаписаны;
  • /etc/nginx/.htpasswd - путь к файлу .htpasswd. Мы разместили его в каталоге конфигурации Nginx для удобства;
  • admin - имя добавляемого пользователя.
Утилита попросит ввести пароль для нового пользователя и подтвердить его.
20250604_kMzuDp0O
Содержимое файла имеет простейший вид:
имя_пользователя:MD5-хэш_пароля20250604_3nOppV7d
Из этого следует то, что специально устанавливать пакеты с утилитой htpasswd нет необходимости, в случае если на сервере не используется ПО Apache.
Сгенерировать данный файл мы можем самостоятельно, даже онлайн.

Создание файла .htpasswd без помощи утилит Apache

Для создания файла .htpasswd мы можем воспользоваться помощью утилиты openssl. Это удобный способ, особенно если вы не используете Apache и работаете только с Nginx. Если у вас на сервере установлен Nginx, то и OpenSSL должен присутствовать. Если быть точным, то сам файл мы создадим вручную командой:
echo "admin:" > /etc/nginx/.htpasswd
  • admin - имя пользователя;
  • /etc/nginx/.htpasswd - путь до файла .htpasswd.
20250604_7CJQt3yP
С помощью openssl мы генерируем хэш пароля:
openssl passwd -apr1Вводим и подтверждаем пароль - в результате получаем готовый хэш.
20250604_FnfTLLeI
Далее мы вручную копируем хэш, открываем файл .htpasswd, например с помощью редактора nano, и вставляем в строку пользователя, сразу после двоеточия(:).
20250604_IgZWny12
Сохраняем изменения сочетанием клавиш Ctrl + O и выходим Ctrl + X.

Настройка Nginx для защиты папки сайта

Для начала необходимо найти файл конфигурации nginx, который содержит блок server вашего сайта. Это может быть как отдельный файл, так и часть какого-то файла. В большинстве случаев вам может помочь утилита grep. Она найдёт вхождения поисковой фразы в файлах заданной директории рекурсивно:
grep -rn "eurohoster.site" /etc/nginx
  • -r - рекурсивный поиск по всем вложенным файлам и директориям;
  • -n - выводить номер строки первого вхождения поисковой фразы;
  • eurohoster.site - ваш домен;
  • /etc/nginx - директория, в которой искать.
В результате вы получите список файлов, в которых найден ваш домен. Вам необходим тот, в котором имеется директива server_name с вашим доменом.
20250604_eZg5E5d5
Открываем найденный файл конфигурации, например с помощью nano. Убедитесь, что в файле есть блок server с вашим доменом.
nano /etc/nginx/conf.d/eurohoster_site.conf
  • /etc/nginx/conf.d/eurohoster_site.conf - путь до конфигурационного файла nginx вашего домена.
Примерно это выглядит вот так:
20250604_43fPzqBK
Для защиты конкретного каталога сайта паролем нам нужно добавить всего один блок location, перед основным location'ом (location /):
location /admin/ {
    auth_basic "Closed";
    auth_basic_user_file /etc/nginx/.htpasswd;
}
  • /admin/ - URL с закрытым доступом. В примере - http://eurohoster.site/admin/;
  • auth_basic "Closed" - включает проверку пользователя и пароля по протоколу HTTP Basic Authentication. Выводит указанное сообщение в форме;
  • /etc/nginx/.htpasswd - путь до .htpasswd файла.
После добавления нового блока получается похожее содержимое файла конфигурации:
20250604_FUacOURT
Сохраняем файл сочетанием клавиш Ctrl + O и выходим Ctrl + X (если используется редактор nano).
Проверяем конфигурацию nginx на корректность:
nginx -tВ случае ответа test is successful перезагружаем веб-сервер:
systemctl restart nginx20250604_ErTq2b23
В итоге вы увидите заветное окно авторизации в браузере:
20250605_O6iqKGh3
Мы подробно разобрали процесс защиты каталога(раздела) сайта паролем с помощью файла .htpasswd в случае использования веб-сервера Nginx. Если у вас возникнут проблемы с этим вопросом на наших VPS и выделенных серверах - вы всегда можете обратиться за помощью в техническую поддержку в чате на сайте или создав тикет.