LNMP架构十七(Nginx访问控制)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sj349781478/article/details/84997809

十七、Nginx访问控制

      毫无疑问,nginx是可以做访问限制的,allow就是允许访问的ip和ip段,deny就是禁止访问的ip和ip段。

1、设置网站根目录的访问权限
location / {
    allow 192.168.1.1/24;
    allow 120.76.147.159;
    deny all;
}

从上到下的顺序,类似iptables。匹配到了便跳出。如上的例子先禁止了192.168.1.1/24,接着禁止单个IP访问120.76.147.159,最后未匹配的IP全部禁止访问.。

2、我们再细化一点,限制访问个别目录或文件后缀名

#在访问uploads、images目录时,访问php|php5|jsp后缀的文件会返回403代码,也就是不给执行代码了
location ~ ^/(uploads|images)/.*\.(php|php5|jsp)$ {
    allow 192.168.1.1/24;
    return 403;
}
#禁止访问所有目录下的sql|log|txt|jar|war|sh|py后缀的文件,这些是什么文件就不详细说了。
location ~.*\.(sql|log|txt|jar|war|sh|py) {
    deny all;
}
#有时候,有些访问记录不想保存到日志里面,例如静态图片
location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF|png)$ {
    access_log off;
}
#如果想用户体验好一点,可以建立一个报错页面,然后让这个页面跳转到其他页面
error_page 403 http://www.example.com/errorfile/404.html;

3、再高级一点,判断特定条件,然后拒绝服务

#判断当http_user_agent返回的结果中包含UNAVAILABLE关键字,则返回403错误。
location / {
    if ($http_user_agent ~ UNAVAILABLE) {
    return 403;
    }
}

再次强调,这些要跟网站实际情况相结合,要不然影响范围被扩大,造成一些莫名其妙的事,那可不是好事,不过一般403都是自己控制,比较好判断,所以最好别直接deny all。

语法规则: location [=|~|~*|^~] /uri/ { … }

= 开头表示精确匹配

^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。

~ 开头表示区分大小写的正则匹配

~*  开头表示不区分大小写的正则匹配

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则

/ 通用匹配,任何请求都会匹配到。

多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):

首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

猜你喜欢

转载自blog.csdn.net/sj349781478/article/details/84997809