HTTP аутентификация · 3 min read · Jan 23, 2026

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

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

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

Я использую веб-сайт www.example.com с корневым каталогом /var/www/www.example.com/web/ и файлом конфигурации виртуального хоста 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 -y 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/14464/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

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

nano /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 после этого:

service nginx reload

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

Запрос базовой аутентификации Nginx (.htpasswd).

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

Вход выполнен.

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

Требуется авторизация Nginx.

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.