图片放在对象存储上,地址里带十五分钟有效的签名。页面上开着是好的,等搜索引擎来抓时签名早过期了,图片搜索里全是裂图。
原因不止一个,得分开看。签名有效期按分钟算,抓取时必然过期;前台把签名地址直接写进了 img 的 src;图片域名没有开公开读,只能靠签名访问;缓存层把带签名的地址一起存了下来。
取一张图的地址看是否带签名
curl -s https://www.lu0.cn/1.html | grep -o 'src="[^"]*\.jpg[^"]*' | head -3
给图片域名开公开读并去掉签名
页面只输出稳定地址,签名留给上传链路
复查一个月内图片的 403 数量
awk '$9==403 && $7 ~ /\.(jpg|png|webp)$/' access.log | wc -l
当时还开着另一个排查窗口,两边日志对照着看才定位到。
改完先别撤,确认这几项。图片地址不再带签名,图片搜索里的裂图消失,图片抓取成功率回到九成以上。
容易忽略的是,带签名的地址只适合临时下载,凡是要被抓取的资源都得用长期可访问的公开地址。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
