вторник, 15 октября 2013 г.

Обычная проверка подлинности HTTP в Nginx

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

Сайт будет www.example.com, находящийся в папке /var/www/www.example.com/web/, виртуальный хост в /etc/nginx/sites-enabled/www.example.com.vhost. Под паролем будет одна папка /var/www/www.example.com/web/test/.

Нужно сделать файл с паролями, где перечислены пользователи и их пароли (в зашифрованном виде). Для создания такого файла, можно либо использовать инструмент Apache htpasswd, или Python скрипт от сюда.

С помощью htpasswd

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

which htpasswd


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


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

apt-get install apache2-utils


Преступим к паролям. Создаем файл с паролями /var/www/www.example.com/.htpasswd и запишем туда пользователя (в примере просто «user»)

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


Будет предложено ввести пароль для пользователя.

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

htpasswd /var/www/www.example.com/.htpasswd new_user


С помощью Python скрипта htpasswd.py

Если не хотите или не можете использовать команду htpasswd, можно пойти другим путем. Скачайтескрипт в /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, с тем же пользователем user.

htpasswd.py -c -b /var/www/www.example.com/.htpasswd user userssecret


Обратите внимание на userssecret это пароль для пользователя user. Ключ -c означает, что файл создается с нуля. Если хотите добавить другого пользователя без удаления всех существующих, используйте команду:

htpasswd.py -b /var/www/www.example.com/.htpasswd new_user new_userssecret


Конфигурация 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

/etc/init.d/nginx reload


Теперь перейдите в браузере по адресу www.example.com/test и вы увидите приглашение ввести пароль. В противном случае вы увидите сообщение об ошибке 401 Authorization Required.

Комментариев нет:

Отправить комментарий