限流防刷&黑白名单(防止恶意攻击)
限制单个 IP 的并发连接数和请求频率,拉黑恶意 IP
shell
# 先定义限流策略,放在http块里(和upstream同级)
http {
# 1. 并发连接限制:单个IP最多同时保持10个连接
limit_conn_zone $binary_remote_addr zone=ip_conn:10m; # 定义存储IP连接数的共享内存区
# 2. 请求频率限制:单个IP每秒最多5个请求(令牌桶算法)
limit_req_zone $binary_remote_addr zone=ip_req:10m rate=5r/s; # 每秒生成5个令牌
# 3. 黑白名单:定义允许/禁止访问的IP段
set$allow_ip"192.168.1.0/24"; # 允许访问的内网IP段
deny 10.0.0.1; # 单独禁止某个IP
}
server {
listen 80;
server_name www.yourdomain.com;
location /api/login { # 登录接口重点保护
# 应用并发连接限制:每个IP最多10个并发连接
limit_conn ip_conn 10;
# 应用请求频率限制:突发请求最多排队10个(超出返回503)
limit_req zone=ip_req burst=10 nodelay;
# 黑白名单检查
if ($remote_addr !~* $allow_ip) { # 如果IP不在允许列表
return 403; # 禁止访问
}
proxy_pass http://backend_servers/;
}
}
biubiu