插件窝 干货文章 nginx修改配置限制恶意爬虫频率的方法

nginx修改配置限制恶意爬虫频率的方法

Nginx 爬虫 限制 配置 921    来源:    2025-04-27

Nginx 配置限制恶意爬虫频率的方法

要限制恶意爬虫的访问频率,可以通过以下几种Nginx配置方法实现:

1. 使用 limit_req 模块限制请求速率

http {
    limit_req_zone $binary_remote_addr zone=anti_spider:10m rate=1r/s;

    server {
        location / {
            limit_req zone=anti_spider burst=5 nodelay;
            # 其他配置...
        }
    }
}
  • zone=anti_spider:10m 创建10MB大小的共享内存区域存储访问状态
  • rate=1r/s 限制每秒1个请求
  • burst=5 允许短时间突发5个请求
  • nodelay 对超出限制的请求立即返回503错误

2. 结合User-Agent识别爬虫

map $http_user_agent $bad_bot {
    default 0;
    ~*(Googlebot|bingbot|YandexBot|Baiduspider|Sogou|Exabot|MJ12bot) 0;
    ~*(bot|crawl|spider|scrap|scan|grab|harvest) 1;
}

server {
    if ($bad_bot) {
        limit_req zone=anti_spider burst=5 nodelay;
    }
    # 其他配置...
}

3. 限制特定IP的访问频率

geo $limited {
    default 0;
    123.123.123.123 1; # 恶意IP
    124.124.124.124 1; # 另一个恶意IP
}

server {
    if ($limited) {
        limit_req zone=anti_spider burst=5 nodelay;
    }
    # 其他配置...
}

4. 使用Nginx Plus的JWT验证

对于Nginx Plus用户,可以使用JWT验证来限制爬虫:

location / {
    auth_jwt "Restricted";
    auth_jwt_key_file /path/to/key.jwk;
    # 其他配置...
}

5. 结合fail2ban自动封禁

  1. 首先在Nginx中记录访问日志:
http {
    log_format anti_spider '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $body_bytes_sent '
                           '"$http_referer" "$http_user_agent"';

    access_log /var/log/nginx/access.log anti_spider;
}
  1. 然后配置fail2ban规则自动封禁频繁访问的IP

6. 限制连接数

http {
    limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;

    server {
        location / {
            limit_conn conn_limit_per_ip 10;
            # 其他配置...
        }
    }
}

注意事项

  1. 配置修改后需要重载Nginx:nginx -s reload
  2. 对于合法爬虫(如Googlebot),建议通过User-Agent白名单放行
  3. 过严格的限制可能会影响正常用户,建议监控和调整阈值
  4. 可以考虑结合CDN服务提供更强大的爬虫防护

以上方法可以单独使用,也可以组合使用以获得更好的防护效果。