Nginx网站或目录密码验证保护( Basic HTTP authentication)用户密码验证配置
nginx location auth_basic 配置
使用 nginx 作为前端服务器。某些资源要保护。用 http auth basic 认证简单方便。
nginx 的 http auth basic 的密码是用 crypt(3) 加密的。
具体可以参考:http://wiki.nginx.org/HttpAuthBasicModule
以我们做一个简单的后台管理为例, 地址:http://xxxx/admin/*, 对admin 下面的文件进行权限管理;
1. 进入ngnix配置的地址,以我的CentOS为例;
cd /usr/local/nginx/conf
2. 使用命令生成passfile 文件:
a. 使用htpasswd:
htpasswd -c -d /usr/local/nginx/conf/pass_file username
输入以上命令,回车输入密码,再次回车,输入确认密码
cat /usr/local/nginx/conf/pass_file
username:xyJkVhXGAZ8tM
b. 使用openssl:
printf "ttlsa:$(openssl passwd -crypt 123456)\n" >>/usr/local/nginx/conf/pass_file
cat /usr/local/nginx/conf/pass_file
ttlsa:xyJkVhXGAZ8tM
账号:ttlsa
密码:123456
reload nginx
4. 修改ngnix 配置
location ~ /admin {
auth_basic "Restricted";
#请使用绝对路径
auth_basic_user_file /usr/local/nginx/conf/pass_file;
#host 地址,不然认证通过之后,找不到对应的文件
root /home/www/admin;
}
5. 重启ngnix ,sudo service nginx reload
6. 登录 http://xxxx/admin/*,弹出验证框,说明验证配置完成
如果admin中有php,就会发现 php url不能正常的解析,我们需要重新配置,配置如下:
location ~ /admin {
auth_basic "Restricted";
#请使用绝对路径
auth_basic_user_file /etc/nginx/pass_file;
#host 地址,不然认证通过之后,找不到对应的文件
root /home/www/admin;
if ($request_filename ~* .php)
{
fastcgi_pass 127.0.0.1:9000;
}
#下面的文件不能放在括号中,否则会报错
fastcgi_index index.php;
#路径同root
fastcgi_param SCRIPT_FILENAME /home/www/admin$fastcgi_script_name;
include fastcgi_params;
}
修改配置,重启ngnix即可,php文件显示正常
7.除此之外,我们还可以对单个文件配置验证,例如Wordpress的wp-login.php
location = /wp-login.php {
auth_basic "Restricted";
auth_basic_user_file /usr/local/nginx/conf/pass_file;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index wp-login.php;
include fastcgi.conf;
}
LNMP一键安装的/vhost/配置文件范例
server
{
listen 80;
#listen [::]:80;
server_name xxx.com;
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/xxx.com;
include wordpress.conf;
#error_page 404 /404.html;
include enable-php.conf;
#############################
# WordPress login Basic #
#############################
location = /wp-login.php {
auth_basic "Restricted";
auth_basic_user_file /usr/local/nginx/conf/pass_file;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index wp-login.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
access_log /home/wwwlog/xxx.com.log;
}
设置完成以后效果如下
博主,请教一下,给WP登录文件加密码后输入用户名密码显示500错误怎么办?
500通常是配置文件有错误,解析不正确导致的.