问题出现得很突然,日志倒是留得挺全。日志按目录统计,/wp-content/uploads/ 一天四万次请求,正文页只有两千次,图片占了抓取预算的九成,新文章迟迟不被发现。
原因不止一个,得分开看。图片没有 CDN 也没有长缓存,蜘蛛反复确认同一批图。另一种情况是图片尺寸过多,每篇文章输出十几张不同尺寸。
还有一种情况,图片 URL 带随机参数,每次都是新地址。
先按目录统计请求占比
awk '{print $7}' access.log | awk -F/ '{print "/"$2"/"$3"/"$4}' | sort | uniq -c | sort -nr | head -10
给图片加长缓存与 immutable
location ~* \.(jpg|png|webp)$ { expires 365d; add_header Cache-Control "public, immutable"; }
减少页面输出的尺寸数量
add_filter('wp_get_attachment_image_attributes', function($a){ unset($a['srcset']); return $a; });
这类问题以前遇到过,但这次的触发条件和上次不一样。
这类改动我都写进变更记录,过两周再出问题时能对上号。
改完先别撤,确认这几项。图片目录请求占比降到五成以下,正文页日抓取量回到五千次以上,图片 304 响应占比明显上升。
图片放 CDN 是根本解法,但 srcset 输出过多才是源头,两件事要一起做。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
