Nginx访问控制
  2OOtxGRti36O 2023年11月02日 38 0

 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配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):

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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  pNDzPQcMbnhQ   2023年11月13日   29   0   0 lampmysqlphp
  9JCEeX0Eg8g4   2023年11月13日   28   0   0 ubuntuphpcentos
  OidTDJjkUiJ3   2023年11月13日   33   0   0 php代码示例
  xEqRD9hV9woQ   2023年11月14日   28   0   0 shelljavajar
  P3nxyT0LRuwj   2023年11月19日   26   0   0 javawar包jar
  lTuY0HnF4CZB   2023年11月13日   30   0   0 mysqlphp
  MCWYWqSAMsot   2023年11月02日   48   0   0 phpbash
  9JCEeX0Eg8g4   2023年11月13日   19   0   0 服务列表javajar
  2OOtxGRti36O   2023年11月13日   32   0   0 sedlinuxphp
  D04qQxYJZ4A6   2023年11月19日   38   0   0 mysqlredisphp
  9JCEeX0Eg8g4   2023年11月13日   28   0   0 javajar