先看现象。站点在 2026 年 10 月下旬换了一批 PHP-FPM 参数,GSC 覆盖率里「抓取被拒 (403)」从 12 条涨到 1800 条,「服务器错误 (5xx)」从 0 涨到 640 条,两条曲线同一天起步。浏览器直接访问完全正常,日志里同时段请求大多是 200。试过关掉防火墙一整天,403 的数字一点没动。
这类报错背后常见的原因有几处,逐个排除就行。防火墙按 UA 和频次拦截,蜘蛛的突发请求被限流后直接回 403。另一种情况是FPM 子进程数调小后并发不够,蜘蛛并发抓取时排队超时返回 502。
还有一种情况,边缘节点把 5xx 响应也缓存了,短时错误被放大成一整批。
另外,两张报表的统计窗口不一样,先修哪个要看日志里两类请求的真实比例。
动手时先按状态码统计蜘蛛请求的分布
awk '$9==403||$9==502{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head
再往下放开官方 IP 段的限流并禁止缓存 5xx
limit_req_zone $binary_remote_addr zone=spider:10m rate=30r/s;
proxy_cache_valid 500 502 503 0;
然后按实际并发核对 FPM 进程上限
pm.max_children = 40
pm.max_requests = 500
等前面都确认过,再用蜘蛛 UA 复测首页的状态码
curl -A 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)' -sI https://www.example.com/ | head -2
怎么算真的好了,看的是同一批现象。两小时后日志里蜘蛛请求的 403 占比降到 1% 以下,5xx 只出现在压测流量上,GSC 覆盖率里两类数字三天内回落并标记为已修复。
提醒一点。5xx 的优先级永远高于 403,前者会直接扣抓取预算,后者至少说明蜘蛛还能连上服务器。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
