Базовая HTTP-аутентификация с Nginx
Это руководство существует для этих версий ОС
- Ubuntu 16.04 (Xenial Xerus)
- Ubuntu 11.04 (Natty Narwhal)
На этой странице
- 1 Предварительное примечание
- 2 Создание файла паролей
- 2.1 Использование команды Apache htpasswd
- 2.2 Использование скрипта htpasswd.py Python
- 3 Настройка Nginx
- 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
Об авторе