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;
}
}
本文参考:嗨客网(www.haicoder.net)
本文暂时没有评论,来添加一个吧(●'◡'●)