nginx限制
Nginx限制爬虫
修改 nginx.conf,禁止网络爬虫的 ua,返回 403,具体配置如下:
server{ listen 80; server_name 127.0.0.1; # 添加如下内容即可防止爬虫 if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") { return 403; } }
Nginx限制浏览器访问
限制浏览器访问:
if ($http_user_agent ~* "Firefox|MSIE") { return 403; }
Nginx限制IP访问
有时候我们需要针对屏蔽某些恶意的 IP 访问我们的网站,或者限制仅仅某些白名单 IP 才能访问我们的网站。这时候我们就可以在 Nginx 中通过简单的配置来达到目的。
Nginx限制IP访问配置
屏蔽单个ip访问
# 格式: deny ip; deny 123.68.23.5;
允许单个ip访问
# 格式: allow ip; allow 123.68.25.6;
屏蔽所有ip访问
deny all;
允许所有ip访问
allow all;
屏蔽ip段访问
# deny ip/mask # 屏蔽172.12.62.0到172.45.62.255访问的命令 deny 172.12.62.0/24;
允许ip段访问
# allow ip/mask # 屏蔽172.102.0.0到172.102.255.255访问的命令 allow 172.102.0.0/16;
配置说明
- 可新建一个配置文件,如 blockip.conf。在其中编写相关的 ip 限制语句,然后在 nginx.conf 中加入如下配置:# 配置ip限制策略
include blockip.conf;
- nginx 会根据配置文件中的语句,从上至下依次判断。因此,写在前面的语句可能会屏蔽后续的语句。除部分 ip 白名单外,屏蔽所有 ip 的错误示例:deny all; # 该语句已经禁止所有ip的访问,后续的配置不会生效
allow 123.45.25.6;
allow 123.68.52.125;
allow 123.125.25.106;正确示例:# 允许部分ip访问
allow 123.45.25.6;
allow 123.68.52.125;
allow 123.125.25.106;
# 禁止其余ip访问
deny all; - 屏蔽策略文件可以放在 http, server, location, limit_except 语句块中,我们可以根据需要合理的配置。
放置位置 | 效果 |
http | nginx 中所有服务起效 |
server | 指定的服务起效 |
location | 满足的 location 下起效 |
limit_except | 指定的 http 方法谓词起效 |
Nginx限制IP访问频率
限制所有单个ip的访问频率
http中的配置
http { #$limit_conn_zone:限制并发连接数 limit_conn_zone $binary_remote_addr zone=one1:10m; #limit_req_zone:请求频率 #$binary_remote_addr:以客户端IP进行限制 #zone=one:10m:创建IP存储区大小为10M,用来存储访问频率 #rate=10r/s:表示客户端的访问评率为每秒10次 limit_req_zone $binary_remote_addr zone=one2:10m rate=10r/s; }
server配置
server { listen 80; server_name localhost; location / { #限制并发数2 limit_conn one1 2; #burst:如果请求的频率超过了限制域配置的值,请求处理会被延迟 #nodelay:超过频率限制的请求会被延迟,直到被延迟的请求数超过了定义的阈值,这个请求会被终止,并返回503 limit_req zone=one2 burst=10 nodelay; root html; index index.html index.htm; } }
访问白名单的配置
http中的配置
http { # geo:指令定义了一个白名单$limited变量,默认值为1,如果客户端ip在上面的范围内,$limited的值为0 geo $limited{ default 1; 10.0.0.140 0; #把10.0.0.140设置为白名单 10.0.0.141 0; #白名单ip,可继续添加 } #使用map指令映射搜索引擎客户端的ip为空串,如果不是搜索引擎就显示本身真是的ip #这样搜索引擎ip就不能存到limit_req_zone内存session中,所以不会限制搜索引擎的ip访问 map $limited $limit { 1 $binary_remote_addr; 0 ""; } limit_conn_zone $limit zone=one:20m; limit_req_zone $limit zone=one2:20m rate=10r/s; }
server配置
server { listen 80; server_name localhost; location / { limit_conn one 2; limit_req zone=one2 burst=10 nodelay; root html; index index.html index.htm; } }
本文参考:嗨客网)