一条推广短链点开之后连着跳了四次,先从短链服务到旧域名,再跳到带 www 的地址,最后才落到正文,首字节时间比直连多出八百毫秒。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,每一跳都是一次完整的请求响应,短链服务、域名归一、强制 HTTPS、补尾斜杠各自做了一层,谁也没想着把规则合并到一起,链路自然越拉越长。

「重定向链过长」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

curl -sIL http://example.com/p/123 | grep -i location
# 期望只剩一条 location
curl -sI https://www.example.com/p/123 | head -3

具体做法是,用 curl 的 -I 参数逐跳打印 Location 响应头,把整条跳转链路完整画出来,别只看最后一跳;把能合并的规则挪到同一层 server 块里,一次跳转能解决的就不要分成两次;只保留最后一跳做 301,前面那几层改成内部重写,直接把请求转发过去。

最后用这个标准收尾,同一条链接只剩下一跳,curl 打印出来的总耗时回落到两百毫秒以内。

作者 9823189