Как защитить каталог сайта паролем с помощью файла .htpasswd в Nginx
04 Jun 2025, 19:58:53
Веб-сервер Nginx не использует .htaccess, как Apache, но всё же поддерживает базовую HTTP-аутентификацию с помощью файлов .htpasswd. Это простой способ ограничить доступ к разделам сайта с помощью логина и пароля.Что такое .htpasswd?
.htpasswd — это текстовый файл, в котором хранятся имена пользователей и их зашифрованные пароли. Этот файл используется для реализации базовой HTTP-аутентификации: когда пользователь пытается открыть защищённую страницу, браузер требует ввести логин и пароль. Если введённые данные не совпадают с записями в .htpasswd, доступ будет отклонён.
Создание файла .htpasswd
Самый простой способ создать файл .htpasswd - воспользоваться утилитой htpasswd, входящей в состав пакета Apache-utils или httpd-tools.htpasswd -c /etc/nginx/.htpasswd admin
- -c - создать новый файл. Не используйте этот флаг если в файле уже есть добавленные пользователи, иначе они будут перезаписаны;
- /etc/nginx/.htpasswd - путь к файлу .htpasswd. Мы разместили его в каталоге конфигурации Nginx для удобства;
- admin - имя добавляемого пользователя.

Содержимое файла имеет простейший вид:
имя_пользователя:MD5-хэш_пароля

Из этого следует то, что специально устанавливать пакеты с утилитой htpasswd нет необходимости, в случае если на сервере не используется ПО Apache.
Сгенерировать данный файл мы можем самостоятельно, даже онлайн.
Создание файла .htpasswd без помощи утилит Apache
Для создания файла .htpasswd мы можем воспользоваться помощью утилиты openssl. Это удобный способ, особенно если вы не используете Apache и работаете только с Nginx. Если у вас на сервере установлен Nginx, то и OpenSSL должен присутствовать. Если быть точным, то сам файл мы создадим вручную командой:echo "admin:" > /etc/nginx/.htpasswd
- admin - имя пользователя;
- /etc/nginx/.htpasswd - путь до файла .htpasswd.

С помощью openssl мы генерируем хэш пароля:
openssl passwd -apr1
Вводим и подтверждаем пароль - в результате получаем готовый хэш.
Далее мы вручную копируем хэш, открываем файл .htpasswd, например с помощью редактора nano, и вставляем в строку пользователя, сразу после двоеточия(:).

Сохраняем изменения сочетанием клавиш Ctrl + O и выходим Ctrl + X.
Настройка Nginx для защиты папки сайта
Для начала необходимо найти файл конфигурации nginx, который содержит блок server вашего сайта. Это может быть как отдельный файл, так и часть какого-то файла. В большинстве случаев вам может помочь утилита grep. Она найдёт вхождения поисковой фразы в файлах заданной директории рекурсивно:grep -rn "eurohoster.site" /etc/nginx
- -r - рекурсивный поиск по всем вложенным файлам и директориям;
- -n - выводить номер строки первого вхождения поисковой фразы;
- eurohoster.site - ваш домен;
- /etc/nginx - директория, в которой искать.

Открываем найденный файл конфигурации, например с помощью nano. Убедитесь, что в файле есть блок server с вашим доменом.
nano /etc/nginx/conf.d/eurohoster_site.conf
- /etc/nginx/conf.d/eurohoster_site.conf - путь до конфигурационного файла nginx вашего домена.

Для защиты конкретного каталога сайта паролем нам нужно добавить всего один блок 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 файла.

Сохраняем файл сочетанием клавиш Ctrl + O и выходим Ctrl + X (если используется редактор nano).
Проверяем конфигурацию nginx на корректность:
nginx -t
В случае ответа test is successful перезагружаем веб-сервер:systemctl restart nginx

В итоге вы увидите заветное окно авторизации в браузере:

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