Nginx · 3 min read · Jan 24, 2026

Базовая HTTP-аутентификация с Nginx

Этот учебник показывает, как вы можете использовать базовую HTTP-аутентификацию с Nginx для защиты паролем каталогов на вашем сервере или даже целого веб-сайта. Это эквивалент базовой HTTP-аутентификации на Apache с .htaccess /.htpasswd.

Я не даю никаких гарантий, что это сработает для вас!

1 Предварительная заметка

Я использую веб-сайт www.example.com здесь с корнем документа /var/www/www.example.com/web/ и конфигурационным файлом vhost Nginx /etc/nginx/sites-enabled/www.example.com.vhost. Каталог, который я хочу защитить паролем, - это /var/www/www.example.com/web/test/.

2 Создание файла паролей

Нам нужен файл паролей, в котором перечислены пользователи, которые должны иметь возможность входить в систему, с их паролями (в зашифрованной форме). Чтобы создать такой файл паролей, мы можем использовать инструмент htpasswd от Apache или использовать скрипт Python с http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.

2.1 Использование команды htpasswd от Apache

Если вы хотите использовать команду htpasswd от Apache, проверьте, существует ли она на вашей системе:

which htpasswd
root@server1:~# which htpasswd  
/usr/bin/htpasswd  
root@server1:~#

Если вы получите вывод, похожий на приведенный выше, все в порядке - htpasswd уже установлен. Если команда возвращает без какого-либо вывода, htpasswd не существует на вашей системе, и вам нужно его установить. На Debian/Ubuntu он является частью пакета apache2-utils, который мы можем установить следующим образом:

apt-get install apache2-utils

Я хочу создать файл паролей /var/www/www.example.com/.htpasswd и сохранить в нем пользователя falko (вы можете дать файлу паролей любое имя, которое вам нравится - не обязательно называть его .htpasswd; я просто назвал его .htpasswd, потому что именно так называются файлы паролей в Apache):

htpasswd -c /var/www/www.example.com/.htpasswd falko

Вас попросят ввести пароль для пользователя falko. Обратите внимание, что переключатель -c делает так, что файл создается с нуля; если его не существовало ранее, он будет создан; если он существовал ранее, он будет перезаписан новым, и все пользователи из старого файла будут потеряны! Поэтому, если вы хотите добавить другого пользователя, не удаляя всех существующих пользователей, используйте команду htpasswd без переключателя -c:

htpasswd /var/www/www.example.com/.htpasswd till

Последняя команда добавляет пользователя till в /var/www/www.example.com/.htpasswd, так что теперь у нас есть пользователи falko и till в нем.

2.2 Использование скрипта htpasswd.py на Python

Если вы не хотите или не можете использовать команду htpasswd от Apache, вы можете использовать скрипт Python с http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.

Мы загружаем его в /usr/local/bin и делаем его исполняемым следующим образом:

cd /usr/local/bin  
wget http://trac.edgewall.org/export/10791/trunk/contrib/htpasswd.py  
chmod 755 /usr/local/bin/htpasswd.py

Я хочу создать файл паролей /var/www/www.example.com/.htpasswd и сохранить в нем пользователя falko (вы можете дать файлу паролей любое имя, которое вам нравится - не обязательно называть его .htpasswd; я просто назвал его .htpasswd, потому что именно так называются файлы паролей в Apache):

htpasswd.py -c -b /var/www/www.example.com/.htpasswd falko falkossecret

Пожалуйста, замените falkossecret на пароль для пользователя falko. Обратите внимание, что переключатель -c делает так, что файл создается с нуля; если его не существовало ранее, он будет создан; если он существовал ранее, он будет перезаписан новым, и все пользователи из старого файла будут потеряны! Поэтому, если вы хотите добавить другого пользователя, не удаляя всех существующих пользователей, используйте команду htpasswd.py без переключателя -c:

htpasswd.py -b /var/www/www.example.com/.htpasswd till tillssecret

Последняя команда добавляет пользователя till в /var/www/www.example.com/.htpasswd, так что теперь у нас есть пользователи falko и till в нем.

3 Настройка Nginx

Теперь, когда у нас есть файл паролей, нам просто нужно добавить его в конфигурацию vhost Nginx в /etc/nginx/sites-enabled/www.example.com.vhost, внутри контейнера server {}.

vi /etc/nginx/sites-enabled/www.example.com.vhost

Поскольку я хочу защитить паролем тестовый каталог в корне документа, я использую location /test {} здесь (чтобы защитить паролем весь веб-сайт, вы бы использовали location / {}):

| server { listen 80; server_name www.example.com example.com; root /var/www/www.example.com/web; [...] location /test { auth_basic "Restricted"; auth_basic_user_file /var/www/www.example.com/.htpasswd; } [...] } |

Перезагрузите Nginx после этого:

/etc/init.d/nginx reload

Вот и все! Теперь вы можете перейти в свой тестовый каталог в браузере ( http://www.example.com/test), и вас должны попросить ввести имя пользователя и пароль:

Если вы введете правильное имя пользователя и пароль, вам будет предоставлен доступ:

В противном случае вы увидите сообщение об ошибке 401 Authorization Required:

4 Ссылки

Об авторе

Фалко Тимме является владельцем Timme Hosting (ультра-быстрый веб-хостинг на nginx). Он является главным куратором HowtoForge (с 2005 года) и одним из основных разработчиков ISPConfig (с 2000 года). Он также внес вклад в книгу O’Reilly “Администрирование систем Linux”.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.