Создаём файл пароля, как и в случае с Apache HTTP:
# htpasswd -c /var/www/vhosts/.htpasswd username New password: Re-type new password: Adding password for user username
Редактируем файл настроек виртуалхоста, например /etc/nginx/conf.d/newsite.com.conf
, и добавляем строки:
auth_basic
– указатель того, что имеет место авторизация + заголовок страницы;
auth_basic_user_file
– указывает на файл с логинами-паролями;
В результате – получаем примерно такую конфигурацию:
server { server_name newsite.com; .... root /var/www/vhosts/newsite.com; location / { index index.html index.htm index.php; auth_basic_user_file /var/www/vhosts/.htpasswd; auth_basic "Password-protected Area"; } location ~ .php$ { include /etc/nginx/fastcgi_params; ... } }
Или, что бы закрыть только один определённый файл – создаём ещё один блок location
, например – ограничим доступ к файлу info.php
в коне сайта:
server { server_name newsite.com; ... root /var/www/vhosts/newsite.com; location ~info.php { auth_basic_user_file /var/www/vhosts/rtfm/.htpasswd; auth_basic "Password-protected Area"; } location / { index index.html index.htm index.php; } location ~ .php$ { include /etc/nginx/fastcgi_params; ... } }
Проверяем конфигурацию:
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Перезапускаем NGINX:
# service nginx restart Stopping nginx: [ OK ] Starting nginx: [ OK ]
Пробуем зайти:
# curl http://newsite.com | head -n 5 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head> <style type="text/css"> body {background-color: #ffffff; color: #000000;} body, td, th, h1, h2 {font-family: sans-serif;} 100 16312 0 16312 0 0 708k 0 --:--:-- --:--:-- --:--:-- 1137k curl: (23) Failed writing body (72 != 8192)
И ещё раз – на защищаемый ресурс:
# curl http://newsite.com/info.php <html> <head><title>401 Authorization Required</title></head> <body bgcolor="white"> <center><h1>401 Authorization Required</h1></center> <hr><center>nginx/1.6.2</center> </body> </html>
Можно просто воспользоваться конвертером, например – тут>>>.
Например, что бы закрыть каталог wp-admin
– в блоке server
указываем:
location /wp-admin/ { index index.php; auth_basic_user_file /var/www/vhosts/rtfm/.htpasswd; auth_basic "Password-protected Area"; location ~ .php$ { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9003; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
Или – закрыть всё, но оставить открытой только директорию public
:
server { ... auth_basic "closed website"; auth_basic_user_file conf/htpasswd; location /public/ { auth_basic off; } }