和apache类似的语法和思路,比如说做网站后台管理的用户认证,匹配.*admin.php来解决
在/usr/local/nginx/conf/vhosts/wyp.conf的虚拟主机配文件中插入以下几行代码
location ~ .*admin\.php$ { 定义匹配条件
auth_basic "wyp auth"; 提示信息
auth_basic_user_file /usr/local/nginx/.htpasswd; 定义密码文件路径
}
第一行的~代表匹配 \.只转义. 不转义也可以
注意:这两行插入的位置有讲究,否则报错或无效。插入到root /usr/local/discuz;下
因为nginx没有自带创建密码文件的工具,所以只能借助apache的工具来实现。如果没有apache,先yum安装一个httpd
路径/usr/local/apache2/bin/htpasswd
htpasswd -c /usr/local/nginx/.htpasswd llzdwyp 创建认证文件.htpasswd和用户名wyp
回车输入两次密码即可
如果要追加认证的用户名和密码,不能用-c来操作,否则会覆盖之前的用户认证文件
htpasswd /usr/local/src/Discuz/wyp/.htpasswd hdnet 追加认证的用户hdnet
最后重新加载nginx的配置文件 restart或者reload
这一步还没有成功,打开管理中心页面,会发现是下载源码。php不解析,这时把服务部分的php解析代码在复制到刚才代码之下:如下:
location ~ .*admin\.php$ {
auth_basic "wyp auth";
auth_basic_user_file /usr/local/nginx/.htpasswd;
include fastcgi_params;
fastcgi_pass unix:/tmp/wyp.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/discuz$fastcgi_script_name;
最后重新加载nginx的配置文件,这时网页可能有缓存,不会成功。可用curl来测试
curl -x127.0.0.1:80 -uwyp:hd792310 192.168.1.60/admin.php 可以看到解析结果
最后有一点,如果要认证一个目录,格式如下:
location /abc { 定义匹配目录
auth_basic "wyp auth"; 提示信息
auth_basic_user_file /usr/local/nginx/.htpasswd; 定义密码文件路径
如果目录下没有php文件,这php解析可以省略,否则需要加上。
}
原文地址:http://llzdwyp.blog.51cto.com/6140981/1693672