换了大图之后日志里 416 突然多起来,一天八百条,几乎全是蜘蛛。抓包看到请求头带 Range 起始 524288 字节,但图片实际只有 300KB,服务端直接回了 416。

真正麻烦的地方在于,几个原因的现象几乎一样。CDN 上的图片被压缩后体积变小,Range 起始位置超出文件长度;源站和边缘的文件版本不一致,长度对不上;预览组件按旧尺寸发 Range 请求,图片已经换过;Nginx 没配 416 的兜底,直接返回默认错误页。

上来先找几条 416 看请求的 Range 值

awk '$9==416 {print $7}' access.log | head -20

接着对比源站与 CDN 的文件大小

curl -sI https://www.example.com/a.jpg | grep -i content-length

然后确认文件的真实字节数

stat -c '%s %n' /data/www/a.jpg

末了把

起

同一份数据我导出了两份,一份留底,一份拿来试。

恢复的判定其实很直接。缓存刷新后 416 从每天八百条降到十几条,图片抓取恢复正常,日志里的平均响应时间也降了 200 毫秒。

416 不会让页面直接消失,但蜘蛛拿不到图片,图片搜索的流量会先掉,别等收录报表报警。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189