Nginx 根据 IP 限流
有的时候站点可能会遭受到 DDOS,之前就遇到过某段时间被 DDOS 了,第二天就有 CDN 供应商打电话询问要不要买他们的服务,呵呵,因此对于 IP 限流是很有必要的。
最基本的配置:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
location /login/ {
limit_req zone=mylimit;
proxy_pass http://my_upstream;
}
}
这里的 zone 是共享的内存块,可以存储数据,这里以 IP 作为 Key。
burst 参数
location /login/ {
limit_req zone=mylimit burst=20;
proxy_pass http://my_upstream;
}
在上面定义了 rate 为:10r/s,burst 相当于一个 queue,当请求超过 10r/s 的时候,前 10 个请求会正常返回,后面的 20 个请求会进入 queue ,,并且会以 10r/s 的出队列,再之后的所有请求都会被拒绝。
完整示例:
limit_req_zone $binary_remote_addr zone=ip:10m rate=5r/s;
server {
listen 80;
location / {
limit_req zone=ip burst=12 delay=8;
proxy_pass http://website;
}
}
白名单
geo $limit {
default 1;
10.0.0.0/8 0;
192.168.0.0/24 0;
}
map $limit $limit_key {
0 "";
1 $binary_remote_addr;
}
limit_req_zone $limit_key zone=req_zone:10m rate=5r/s;
server {
location / {
limit_req zone=req_zone burst=10 nodelay;
# ...
}
}
评论列表 (0条):
加载更多评论 Loading...