添加白名单:
添加文件:nginx/conf/limit/whiteip.conf
添加ip,也就是你自己的ip地址或者cdn地址,或者负载均衡服务器的ip地址,再或者你的安全代理服务器(安全宝或360网站卫士等)的地址。
可以是一个地址,也可以是一个地址池
127.0.0.1 0; #白名单: 127.0.0.1
172.16.0.0/16 0; #白名单 172.16.0.0 ~ 172.16.255.255
192.168.0.0/24 0; #白名单 192.168.0.0 ~ 192.168.0.255
添加文件 nginx/conf/limit/limit_zone.conf
内容如下
geo
$whiteiplist {
default 1;
include limit/whiteip.conf;
}
map
$whiteiplist $limit {
1 $binary_remote_addr;
0 "";
}
#除了白名单外的IP每秒最多处理 8 个请求
limit_req_zone $limit zone=perreq:10m rate=8r/s;
limit_conn_zone $limit zone=perip:10m;
添加文件 nginx/conf/limit/limit_location.conf
limit_conn perip 8; # 限制除了白名单外的IP,每个IP最大并发为8
limit_req zone=perreq nodelay;
limit_conn/limit_req 可以只保留其中一个看自己需要了!
修改 nginx/conf/nginx.conf 在 http { ... }
区域添加下面代码
include limit/limit_zone.conf;
然后在虚拟主机的配置文件的 location ~ .*.(php|php5)?$ { ... }
区域(就是处理php文件请求的区域)添加
include limit/limit_location.conf;
用户的 IP 地址 $binary_remote_addr 作为 Key,每个 IP 地址最多有 50 个并发连接
你想开 几千个连接 刷死我? 超过 50 个连接,直接返回 503 错误给你,根本不处理你的请求了
limit_conn_zone $binary_remote_addr zone=TotalConnLimitZone:10m ;
limit_conn TotalConnLimitZone 50;
limit_conn_log_level notice;
用户的 IP 地址 $binary_remote_addr 作为 Key,每个 IP 地址每秒处理 10 个请求
你想用程序每秒几百次的刷我,没戏,再快了就不处理了,直接返回 503 错误给你
limit_req_zone $binary_remote_addr zone=ConnLimitZone:10m rate=10r/s;
limit_req_log_level notice;
具体服务器配置
server {
listen 80;
location ~ \.php$ {
## 最多 5 个排队, 由于每秒处理 10 个请求 + 5个排队,你一秒最多发送 15 个请求过来,再多就直接返回 503 错误给你了
limit_req zone=ConnLimitZone burst=5 nodelay;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}