接上 CDN 后图片全部 403,直接访问对象存储的预签名地址却正常。CDN 的回源日志里,请求没有带任何签名参数。日志里能对上时间点,这种反而好排。
CDN 回源是另一条请求,边缘节点不会把用户请求里的签名原样转过去。私有桶要求每个回源请求都带有效签名,缺了就按匿名访问拒绝。有的 CDN 支持回源鉴权,需要单独开启并配密钥。这一点先确认清楚,后面就不用反复试。
curl -I https://cdn.a.com/a.jpg curl -I "https://bucket.s3.amazonaws.com/a.jpg?X-Amz-Signature=..." aws s3api get-bucket-policy --bucket b
围绕「CDN 回源私有桶」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。
处理上按这个顺序:在 CDN 开启回源鉴权 用对象存储支持的签名方式;确认回源 Host 和签名里的一致;把桶临时改成公共读做对比 验证链路;验证完恢复私有 不要长期公共读。
结果对不对很好判断,通过 CDN 访问返回 200 且 x-cache 显示命中,源站日志出现带签名的回源请求。
