就在刚才,发了一篇关于CloudFlare接管后邮箱设置问题的文章,贴了两张图,结果一张顺利上传并显示,另一张则没有成功。
2025-09-14 11 50 05.png
因为边写边设置,也不知道是配置出了问题,还是CloudFlare和阿里云的DCDN配合不好,总之情况就是这么个情况。
打开OSS的文件列表,能显示的图片已经存在,而另一张却不在列表中。
在网上搜索了半天,没能找到合适的答案,在阿里云上提交工单,给出的解决方案也并不让人满意,让我还是在CloudFlare设置上想想办法。
放弃CloudFlare转换成阿里云的DNS记录,之前的问题仍然存在,上传的图片只有名称但却没有真正上传到OSS中,这也就意味着之前的判断是错误的,原因不在CloudFlare,而在阿里云的设置中。由于主站和子站使用不同的系统也有不同的OSS配置,目前来看最顺利的反而是心百科(使用MediaWiki),图像上传和显示都正常。一则它单独使用一台服务器,其他站点都共用另一台服务器;二则只有MediaWiki使用OSS是没有回源功能的,因为它使用的AWS插件并不支持这么做。所以无论我如何将参数调整成一致都可能是无用功。
还有一点是,BookStack在后台清理图像时会出现524错误,也无法生成sitmaps.xml文件,这些很难说是跟CloudFlare一点关系都没有。
好吧,先解决图片回源的问题。
从网上有限的资料中找到一个,是关于源站SNI的,之前阿里工单中也同样提到这个。

SNI(Server Name Indication)是对SSL/TLS协议的扩展,允许服务器在单个IP地址上承载多个SSL证书,可解决一个HTTPS服务器拥有多个域名但是无法预知客户端到底请求的是哪一个域名的服务问题。开启SNI后,在CDN节点向源站发起TLS握手请求时,源站会根据TLS握手请求中携带的SNI信息来确认被请求的业务域名,返回正确的SSL证书给CDN节点。

如今出问题的这几个网站,就是单个IP上有多个子域名,而且每一个网站都开启了强制跳转HTTPS,所以如果想使用HTTPS不开SNI就有可能会在HTTP和HTTPS之间强制来回跳转而找不到真正的源站,最终无法回源。
选择OSS的Bucket对象,在数据管理->镜像回源中创建或修改规则,勾选携带SNI选项。
2025-11-02 15 31 25.png
记得在DCDN中的回源设置中,创建默认回源SNI。
2025-11-02 15 36 23.png
上述方法在BookStack和WordPress中正常了,但在Typecho中还是存在问题,会报“424 Failed Dependency”错误。
2025-11-03 08 19 05.png
半夜提交阿里云工单,结果第二天早上的时候,图片恢复正常了。不过另一张同一时间上传的还是一样存在问题。工程师还是建议我去Cloudflare看一下,是否是因为waf将回源给拦截了。
隔一天之后,BookStack站点和Typecho两个站点又都不行了,而WordPress那个无论我怎么修改设置,上传文件都一点问题没有。而且就算我在Cloudflare中将OSS的代理打开,上传图片也一点问题都没有。不过真要说有问题就是,即便是我把图片删除后,本地和OSS上都没有了,由于Cloudflare的缓存关系,在浏览器中能够浏览。

参考资料

https://blog.xgblack.cn/alioss-image-back-to-the-source-failure-solution/

最后修改:2025 年 11 月 08 日
如果觉得我的文章对你有用,请随意赞赏