这个坑值得记一笔。改版时在 Nginx 加了补斜杠规则,应用里又做了一次同样的跳转。蜘蛛请求不带斜杠的地址,先 301 到带斜杠,再 301 到带参数版本,一次抓取经历两跳,抓取预算被吃掉三成。

刚开始盯着「CDN 也配了尾斜杠归一,形成三段跳」,折腾了半个多小时,排掉了。

排查方向其实有限,先把可能性排一排。Nginx 和应用层各写了一条补斜杠规则;跳转目标又带了查询参数,触发第二条规则;跳转链里有一跳指向 http,再跳回 https。

跟一次完整跳转链

curl -sIL https://www.example.com/p/1 -o /dev/null -w '%{num_redirects} %{url_effective}\n'

数一下链路里有几次 301

curl -sIL https://www.example.com/p/1 | grep -i '^HTTP/'

只保留 Nginx 一层跳转

rewrite ^/(.+[^/])$ /$1/ permanent;

等前面都确认过,再确认 CDN 关闭尾斜杠归一

curl -sI https://www.example.com/p/1/ | grep -i 'x-cache'

这类改动我都写进变更记录,过两周再出问题时能对上号。

怎么算真的好了,看的是同一批现象。跳转次数从两次降到一次,因跳转浪费的抓取占比降到 5% 以下。

每次跳转都是一次抓取成本,规则叠加时先在命令行跟一遍完整链路。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189