Unix-way → Обычная проверка подлинности 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.
  • avatar
  • pashtuun
  • 4936
  • +21
  • 22 сентября 2011, 11:25

Комментариум (3)

RSS свернуть / развернуть
+
+3
avatar

Anonymous

  • 23 сентября 2011, 10:30

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Спасибо!!!
+
+3
avatar

Aysenhorn

  • 24 сентября 2011, 19:53

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
+1 Давно пользуюсь, очень удобно для локальных ресурсов, но для продакшена не катит, лучше iptables юзать
+
0
avatar

pashtuun

  • 26 сентября 2011, 12:19

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Как фаерволлом сделать подскажите? Я только учусь, поймите правильно

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.