S3存储桶上传新图片后静态网站无法加载问题求助
解决S3静态网站新图片404(NoSuchKey)问题
针对你遇到的新图片加载404问题,结合已排查的点和异常现象,给出以下针对性解决方案:
核对S3对象键的大小写完全匹配
S3对象键是严格大小写敏感的,而本地系统(Windows/macOS)默认不区分文件名大小写。你控制台报错的Key是images/parking-winds-V2.PNG,务必确认S3桶中实际存储的文件名大小写完全一致——比如是否是parking-winds-v2.png(小写v2或后缀png)。同时检查Github Action同步脚本是否无意中修改了文件名的大小写。排查Cloudflare缓存与规则干扰
尽管你清空了Cloudflare缓存,但可能存在缓存键大小写不匹配的问题:Cloudflare默认缓存键区分大小写,若之前存在大小写不同的同名文件缓存条目,会导致请求匹配错误。可以尝试:- 在Cloudflare「缓存规则」中,针对
/images/*路径设置「缓存级别」为「忽略查询字符串」; - 临时开启Cloudflare「开发模式」(持续3小时),绕过缓存直接请求源站测试;
- 检查是否存在页面规则设置了URL重写、转发,导致图片请求路径被修改。
- 在Cloudflare「缓存规则」中,针对
修正S3静态网站托管配置
- 先上传
error.html到桶根目录:虽然这不是图片404的直接原因,但S3在处理错误时若找不到自定义错误文档,可能引发路径解析异常; - 确认CNAME指向的是S3静态网站托管端点(格式为
www.jamesedens.me.s3-website-<区域>.amazonaws.com),而非S3 REST API域名(www.jamesedens.me.s3.amazonaws.com)——两类端点的路径解析逻辑不同,REST域名对大小写敏感的处理更严格,容易引发NoSuchKey错误。
- 先上传
彻底清除浏览器隐性缓存
普通缓存清除可能残留硬缓存,尝试:- 打开Chrome开发者工具→「网络」面板,勾选「禁用缓存」后刷新页面;
- 使用
Ctrl+Shift+R(Windows)或Cmd+Shift+R(Mac)强制刷新,绕过本地缓存。
验证Github Action同步的完整性
查看Github Action的执行日志,确认图片文件是否完整上传到S3,同步过程中是否有报错或中断情况。S3本身上传后立即可读,同步延迟的可能性极低,但需排除同步脚本的原子性问题(比如先删后传导致的短暂404)。
内容的提问来源于stack exchange,提问作者jedensuscg
相关产品推荐
相关产品推荐

