记录一下那天晚上的排查过程。商品详情页把整套筛选参数都拼进 URL 长度到 1800 字符 源站 Nginx 1.24 能正常返回 200 但前面套的 CDN 直接回 414 Request-URI Too Large 日志里这类请求一天 3000 多次 蜘蛛抓到的全是错误页

刚开始盯着「分页链接把上一页参数原样继承 越翻越长」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。CDN 默认 URI 上限 1024 或 2048 字节 超过直接拒绝。另一种情况是筛选参数没做短链或路径化 全部堆在 query 上。

另外,canonical 也写成长地址 等于告诉蜘蛛这就是正版。

量一下实际 URL 长度分布

awk '{print length($7)}' access.log | sort -n | tail -5

超长参数地址 301 回精简列表页

if ($args ~ '.{512,}') { return 301 /list; }

给详情页补指向精简版的 canonical

curl -s https://www.example.com/p/1 | grep -o 'canonical[^>]*'

调大 CDN 的 URI 上限后回源验证

curl -s -o /dev/null -w '%{http_code}\n' 'https://www.example.com/list?a=1&b=2'

改完先别撤,确认这几项。日志里 414 归零 长参数地址 301 到精简页 蜘蛛抓取成功率达到 99% 以上。

URL 长度不是玄学 是中间层的硬限制 超过 2000 字符迟早有一层把你拦下来。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189