You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core IP拦截中间件求助:返回429仍致服务器负载过高

解决方案

一、补全429响应体

  • 拦截爬虫IP时,除设置429 Too Many Requests状态码,必须返回明确的响应内容,避免空响应体。以常见框架和服务器为例:
    • Django中间件示例:
      def process_request(self, request):
          crawler_ip = self.is_crawler(request.META.get('REMOTE_ADDR'))
          if crawler_ip:
              response = HttpResponse(
                  '{"error": "Too many requests, suspected crawler activity"}',
                  content_type="application/json"
              )
              response.status_code = 429
              return response
      
    • Nginx配置示例:
      # 先定义爬虫识别规则(比如匹配恶意User-Agent)
      map $http_user_agent $is_crawler {
          default 0;
          "~*BadCrawler" 1;
          "~*Spider/1.0" 1;
      }
      
      server {
          # ...其他配置
          if ($is_crawler) {
              return 429 '{"error": "Too many requests, suspected crawler"}';
              add_header Content-Type application/json;
          }
      }
      

二、降低服务器负载的关键优化

  • 前置拦截逻辑:将爬虫检测放到入口层(Nginx、CDN),不要让请求进入应用服务器。比如用Nginx的limit_req_module结合爬虫特征直接拦截,减少应用进程的无效消耗。
  • 优化检测效率:把已标记的爬虫IP存入Redis等内存缓存,检测时直接读取缓存,避免每次请求都执行数据库查询或复杂正则,降低CPU开销。
  • 限制请求频率与并发:在Nginx或防火墙层面配置单IP的请求频率和并发数上限,比如:
    limit_req_zone $binary_remote_addr zone=crawler_limit:10m rate=5r/s;
    limit_conn_zone $binary_remote_addr zone=crawler_conn:10m;
    
    server {
        # ...其他配置
        limit_req zone=crawler_limit burst=10 nodelay;
        limit_conn crawler_conn 5;
    }
    
  • TCP层封禁高频恶意IP:对持续发起请求的爬虫IP,直接用iptables/ufw封禁端口,彻底阻断其请求,消除这类IP的资源占用:
    iptables -A INPUT -s 192.168.1.100 -p tcp --dport 80 -j DROP
    

三、验证优化效果

  • 查看服务器监控面板,确认CPU使用率、上下行流量回到正常区间。
  • 用curl模拟爬虫请求,验证响应内容:
    curl -A "BadCrawler/1.0" http://your-domain.com -v
    

内容的提问来源于stack exchange,提问作者Quang Huy Hoang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:15:08