问题出现得很突然,日志倒是留得挺全。换了新的 CDN 之后,抓取统计里的平均下载大小从 42KB 涨到 118KB,服务器带宽账单也翻了一倍。源站明明开着 gzip,直接访问压缩正常,经 CDN 回源后拿到的却是未压缩内容。

刚开始盯着「压缩白名单只包含 text/html 没带 application/json 与 xml」,折腾了半个多小时,排掉了。

排查方向其实有限,先把可能性排一排。回源请求没有透传 Accept-Encoding 源站按纯文本返回。另一种情况是CDN 的压缩开关关闭 但缓存里存的是未压缩版本。

还有一种情况,边缘节点对已缓存的旧副本不做重新压缩。

第一件事是对比直连和经 CDN 的响应头

curl -sI -H 'Accept-Encoding: gzip' https://www.example.com/post/123 | grep -i content-encoding

然后确认源站压缩白名单覆盖的类型

gzip_types text/html text/css application/javascript application/json application/xml;

再往下打开 CDN 的回源压缩并刷新缓存

curl -X PURGE https://www.example.com/post/123

复测下载大小是否回落

curl -s -o /dev/null -w '%{size_download}\n' --compressed https://www.example.com/post/123

改完先别撤,确认这几项。开启回源压缩并清掉旧副本后,下载大小回到 40KB 上下,抓取统计里的平均体积同步下降,带宽账单也恢复正常。

补一句。抓取体积突然变大先看编码头,压缩没生效时蜘蛛拿到的是完整文本,抓取预算会被白白消耗一倍。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189