Skip to content

限流防刷&黑白名单(防止恶意攻击)

限制单个 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/;
    }
}