给字体目录加了 gzip,woff2 响应反而从 92KB 变成 103KB,传输时间没降,CPU 占用还上去了。乍看像缓存或者权限的锅,追下去往往不是。
gzip_types text/css application/javascript application/json; # 不要包含 font/woff2 curl -sI -H 'Accept-Encoding: gzip' https://example.com/font.woff2
追下去是这么回事:woff2 内部已经用 Brotli 压过,再套一层 gzip 只能压到元数据,头部开销反而让体积变大。Nginx 默认按 MIME 判断,font/woff2 常常被误加进 gzip_types。
「woff2 gzip」这类改动最怕改一半,回滚脚本先准备好,再动生产。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
偶发问题先统计频率,一小时几次和一天一次,查法完全不同。改完顺手把文档补一句,省得下次自己重新推一遍。
监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
具体做法是,在 gzip_types 里把 font/woff2 去掉 只留文本类型;用 curl 看 Content-Encoding 和 Content-Length 确认实际行为;改完重载 Nginx 再测一次 配置重载失败时旧规则还在生效。
验收就看一点,woff2 响应不再带 Content-Encoding,体积回到 92KB。
