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 htpasswdroot@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 Ссылки
- Nginx: http://nginx.org/
- Wiki Nginx: http://wiki.nginx.org/
- Скрипт htpasswd.py на Python: http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py
Об авторе
Фалко Тимме является владельцем Timme Hosting (ультра-быстрый веб-хостинг на nginx). Он является главным куратором HowtoForge (с 2005 года) и одним из основных разработчиков ISPConfig (с 2000 года). Он также внес вклад в книгу O’Reilly “Администрирование систем Linux”.
Get new posts in your inbox
No spam. Unsubscribe anytime.