Поиск по сайту:

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


Это руководство существует для этих версий ОС

  • Ubuntu 16.04 (Xenial Xerus)
  • Ubuntu 11.04 (Natty Narwhal)

На этой странице

  1. 1 Предварительное примечание
  2. 2 Создание файла паролей
  3. 2.1 Использование команды Apache htpasswd
  4. 2.2 Использование скрипта htpasswd.py Python
  5. 3 Настройка Nginx
  6. 4 ссылки

В этом руководстве показано, как вы можете использовать базовую HTTP-аутентификацию с Nginx для защиты паролем каталогов на вашем сервере или даже всего веб-сайта. Это эквивалент 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 Создание файла паролей

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

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

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

which htpasswd
:~#

Если вы получите вывод, подобный приведенному выше, все в порядке — 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

Если вы не хотите или не можете использовать команду Apache htpasswd, вы можете использовать скрипт 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), и вас попросят ввести имя пользователя и пароль:

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

В противном случае вы увидите сообщение об ошибке 401 Требуется авторизация:

4 ссылки

  • Nginx: http://nginx.org/
  • Вики Nginx: http://wiki.nginx.org/
  • Скрипт htpasswd.py Python: http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py

Об авторе