有时候我们会有一些特殊的限制访问的方法,那就比如说我们的网站,某些时刻,我们发现通过访问日志可以看到有几个ip,它在不停地尝试进行***,那这个时候我们就可以把非法的ip给它禁掉,不允许访问我们的网站,这是禁止ip;有时候,我们也可以限定,做一下白名单,这样比用户认证还要安全。
## 编辑配置文件
[root@wy ~]# vim /usr/local/nginx/conf/vhosts/test.conf
location ~ .*admin\.php$ {
allow 127.0.0.1;
deny all;
#auth_basic "Auth";
#auth_basic_user_file /usr/local/nginx/conf/.htpasswd;
include fastcgi_params;
fastcgi_pass unix:/tmp/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
}
解释说明:
把用户认证里的这两行去掉:auth_basic "Auth";
auth_basic_user_file /usr/local/nginx/conf/.htpasswd;
换成了:
allow 127.0.0.1;
deny all;
## 检查并重新加载
[root@wy ~]# /usr/local/nginx/sbin/nginx -t
[root@wy ~]# /usr/local/nginx/sbin/nginx -s reload
## 测试
[root@wy ~]# curl -x127.0.0.1:80 www.test.com/admin.php -I
HTTP/1.1 200 OK
[root@wy ~]# curl -x192.168.219.128:80 www.test.com/admin.php -I
HTTP/1.1 403 Forbidden
解释说明:
配置里只允许127.0.0.1访问
[root@wy ~]# curl -x192.168.219.128:80 www.test.com/forum.php -I
HTTP/1.1 200 OK
解释说明:
只是限制了关于admin.php的
注:
如果设置白名单:
allow ip;
deny all;
如果设置黑名单:
deny ip;
nginx与apache的allow、deny不太一样,apache的它需要有一个顺序(order设置),nginx不分先后顺序。
上面的配置中location的设置的黑白名单不变,假如我们设置一下全局的黑名单或白名单,看看效果。
## 设置全局黑名单
[root@wy ~]# vim /usr/local/nginx/conf/vhosts/test.conf
deny 127.0.0.1;
deny 192.168.219.128;
## 检查并重新加载
[root@wy ~]# /usr/local/nginx/sbin/nginx -t
[root@wy ~]# /usr/local/nginx/sbin/nginx -s reload
## 测试
[root@wy ~]# curl -x127.0.0.1:80 www.test.com/admin.php -I
HTTP/1.1 200 OK
解释说明:
即使设置了全局黑名单,但局部设置了白名单可以访问 admin.php 。
[root@wy ~]# curl -x127.0.0.1:80 www.test.com/forum.php -I
HTTP/1.1 403 Forbidden
[root@wy ~]# curl -x192.168.219.128:80 www.test.com/forum.php -I
HTTP/1.1 403 Forbidden
解释说明:
对这两个做了黑名单,不允许访问
总结:
1、如果只有单独的全局匹配或则单独的location精确匹配,他们都是以来源IP 逐一从上到下匹配,其中一条命令匹配成功,其他匹配条件失效。
2、如果既有全局匹配又有location精确匹配情况,以location精确匹配情况为主、以来源IP 逐一从上到下匹配,其中一条命令匹配成功,其他匹配条件失效。