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解析可以省略,否则需要加上。

}