----------------------------------------
限流算法
漏桶原理 nginx限流
令牌牌桶 iptables限流
固定窗口
滑动窗口
ngx_http_limit_req_module
流量控制
rate-limiting
用来限制用户在给定时间内HTTP请求的数量。
配置限流 基础版
# 限流规则
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=5r/s;
server {
location /login/ {
# 启动规则
limit_req zone=mylimit;
proxy_pass http://my_upstream;
}
}
---------------------------------
配置限流 基础版+桶 [处理突发]
# 限流规则
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=5r/s;
server {
location /login/ {
# 启动规则 并规定桶的大小
limit_req zone=mylimit burst=20;
proxy_pass http://my_upstream;
}
}
-------------------------------
配置限流 基础版+桶+无延迟
# 限流规则
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
location /login/ {
# 启动规则 并规定桶的大小
limit_req zone=mylimit burst=20 nodelay;
proxy_pass http://my_upstream;
}
}
-------------------------------
高级配置示例
黑白名单
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;
# ...
}
}
====================================================
一个location块中配置多个`limit_req`指令。
符合给定请求的所有限制都被应用时,意味着将采用最严格的那个限制。
=====================================================
location ~ .*\.php$ {
deny all;
}
location ~ ^\..*$ {
deny all;
}