前言
宝塔在商业化的进程中渐行渐远,存在诸多问题,如强制收集手机号、部署速度极慢、响应迟缓、UI 界面陈旧,且 BUG 层出不穷。甚至连宝塔官方自己的 demo 都惨遭黑客攻击,如今,我已难以看到宝塔的任何优势。
因此,我从宝塔切换至 1panel,摆脱了宝塔。
1Panel,作为一款新兴的开源运维面板,在 GitHub 上的 star 数量呈现出断崖式上升的态势,同时频繁发布新的版本(releases)。这无疑是对其卓越实用性的最佳证明。
在这个属于 Docker 的时代,当我使用 1panel 面板时,也遭遇了不少难题。比如,在完成所有数据迁移后,出现了 424 无法访问资源的问题。
问题描述
控制台 CDN 报错 424,存储桶镜像回源提示 MirrorFailed,Error status : 502 from mirror host, should return 200 OK. 但浏览器却可以正常访问源站。
解决过程
首先,我查询了 424 报错的含义,基本可以确定是源站的问题。
Mirroring failed, please check your mirror configuration
- 问题原因:配置的回源地址无法访问、回源地址不存在请求的文件等。
- 解决方案:请参见概述排查回源地址是否有效
Read body from mirror host failed, please check your mirror host
- 问题原因:无法从镜像源站读取数据。
- 解决方案:请检查是否能正常访问镜像回源地址中的文件。
Bytes read is not equal to expected
- 问题原因:从镜像源站读取的数据缺失或无效。
- 解决方案:请检查源站是否能向OSS正常发送数据。
MD5 in header() is not equal to MD5 calculated
- 问题原因:回源文件的MD5值与Content-MD5值不匹配,OSS不保存回源文件。
- 解决方案:请检查是否因源站服务和网络通讯异常,导致了回源文件的MD5值与Content-MD5值不匹配。
The object you specified already exists and can not be overwritten
- 问题原因:文件已存在且不可被覆盖。
- 解决方案:不支持覆盖同名文件。请通过GetBucket (ListObjects)检查已存在的文件。
The object you specified is immutable
- 问题原因:Bucket处于被保护状态时,无法向该Bucket写入文件。
- 解决方案:确保回源文件写入的Bucket未处于合规保留策略的保护状态。请通过GetBucketWorm获取Bucket的保护状态。
Meta is too large
- 问题原因:用户自定义元数据超出限值。
- 解决方案:一个Object可以有多个自定义元数据,但所有的自定义元数据总大小不能超过8 KB。
Mirror request is rejected by QoS
- 问题原因:每秒请求数QPS(Query Per Second)超出限值。
- 解决方案:对于镜像回源,中国各地域默认QPS为2000、流量为2 Gbit/s;海外各地域默认QPS为1000、流量为1 Gbit/s。如您的业务有更大的QPS需求,请联系技术支持。
Error status : 0 from mirror host, should return 200 OK
- 问题原因:源站拒绝了回源请求。
- 解决方案:关闭源站防火墙或宝塔的拦截策略。
由于在将运维面板切换为 1panel 后就无法访问资源,我的思考方向基本指向了源站。
可能的原因只有这个了 ——“Error status : 0 from mirror host, should return 200 OK”,即源站的拦截策略设置存在问题。
我逐步关闭了 1panel 面板的所有防火墙,但问题依旧存在。
在搜索问题时,我发现了这两篇文章:记录阿里云CDN加速报502错误问题,我的解决方案,阿里云虚拟主机搭建多网站情况下,cdn实现分别配置,这似乎和我的问题有所联系。
我分析过后,认为这是CDN没有设置回源SNI,导致抛出错误424。
这意味着在给 1panel 面板添加 ssl 证书后,源站现在拥有多个域名。当 CDN 节点被访问返回 404 后,它不知道与源站的哪个域名握手以下载资源,从而导致了 424 错误的抛出。
当源站 IP 绑定了多个域名,且回源协议为 HTTPS 时,需通过配置回源 SNI 指明所请求的具体域名,源站根据配置的 SNI 名称返回对应域名的 SSL 证书,以确保正常回源。
回源 SNI 的工作流程如下:
- 当 CDN 节点以 HTTPS 协议访问源站时,需要在 SNI 中指定访问的具体域名(如:isjauna.com)。
- 源站接收到请求后,根据 SNI 中记录的域名,返回对应域名的证书(即 isjauna.com 的证书)。
- CDN 节点收到证书,与服务器端建立安全连接。
什么是SNI以及如何配置回源SNI\_CDN(CDN)-阿里云帮助中心 (aliyun.com)
在配置回源 SNI 后,问题成功得以解决。
具体操作方法如下:
- 在左侧导航栏,单击 “域名管理”。
- 在域名管理页面,找到目标域名,单击操作列的 “管理”。
- 在指定域名的左侧导航栏,单击 “回源配置”。
- 在配置页签下找到 “回源 SNI”,单击 “修改配置”。
- 在回源 SNI 对话框中,打开回源 SNI 开关,输入您希望客户端从哪个域名获取资源(例如:isjauna.com)。