结论:UA 黑名单只能挡低端爬虫,要配合频率限制和 IP 封禁才有效,单靠 UA 很容易被伪造绕过。
①先收集特征:在论坛后台或服务器日志里筛出高频访问且 UA 异常的来源,比如带 Python、Scrapy、Go-http-client、空 UA 的请求,整理成黑名单列表。
②Nginx 层拦截:用 map 指令匹配 $http_user_agent,命中黑名单就 return 403,这样在进入 PHP 之前就断掉,省服务器资源。
③注意别误伤:百度、谷歌、必应等正规蜘蛛的 UA 要放行,最好用反向 DNS 验证真伪,避免有人伪装成百度蜘蛛被一起封掉。
④补上频率限制:在 Nginx 里用 limit_req 对同 IP 做限速,比如每分钟 60 次,超过就返回 503。UA 黑名单加限速双管齐下,采集成本才会明显上升。