В статье показано, как можно использовать базовую 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, проверьте ее наличие в вашей системе:
Если получили результаты, подобный приведенному выше, все нормально — htpasswd уже установлен. Если команда возвращает ответ без какой-либо надписи, это значит htpasswd не существует, и его нужно установить. В Debian/Ubuntu это пакет apache2-utils, установим
Преступим к паролям. Создаем файл с паролями /var/www/www.example.com/.htpasswd и запишем туда пользователя (в примере просто «user»)
Будет предложено ввести пароль для пользователя.
Ключ -c означает — файл создается с нуля. Если файл уже существует, тогда все пользователи из него будут удалены! Поэтому, если нужно добавить другого пользователя без удаления всех существующих, используется команда без ключа -с:
С помощью Python скрипта htpasswd.py
Если не хотите или не можете использовать команду htpasswd, можно пойти другим путем. Скачайтескрипт в /usr/local/bin и дайте права
Создаем файл с паролями /var/www/www.example.com/.htpasswd, с тем же пользователем user.
Обратите внимание на userssecret это пароль для пользователя user. Ключ -c означает, что файл создается с нуля. Если хотите добавить другого пользователя без удаления всех существующих, используйте команду:
Конфигурация Nginx
Теперь когда есть файл с паролями, нужно добавить его в виртуальный хост Nginx /etc/nginx/sites-enabled/www.example.com.vhost в контейнер server {}
В примере защищаем паролем тестовую папку в корневом каталоге, потому используется location /test {} (чтобы запаролить весь сайт можно указать location / {})
Перезагружаем Nginx
Теперь перейдите в браузере по адресу www.example.com/test и вы увидите приглашение ввести пароль. В противном случае вы увидите сообщение об ошибке 401 Authorization Required.
Сайт будет 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.
Комментариев нет:
Отправить комментарий