这不是证书事故,而是一次被 SSL 表象严重误导的回源架构事故。
一、事故背景
本站整体采用以下架构:
国内源站:阿里云上海
多站点共存(主站 + 短链接站+海外一堆站+国内服务器一堆站)
海外访问:Cloudflare
Cloudflare → 美国洛杉矶回源专用服务器
回源服务器 → Tailscale 内网 → 国内源站
该架构已稳定运行近一年,从未发生过窜站或 SSL 异常。
二、事故现象(极度反直觉)
事故仅发生在「主站海外访问」场景,表现如下:
1. SSL 模式:Full (Strict)
浏览器地址栏 HTTPS 正常(挂锁)
页面内容提示:Invalid SSL certificate


2. SSL 模式:Full
页面可以加载
但访问主站却跳转/显示为短链接站内容(窜站)

3. SSL 模式:Flexible
页面直接返回 403

与此同时:
- 国内访问主站:正常
- 国内 CDN:正常
- 海外 CDN 节点:正常


三、为什么这件事极其迷惑
使用的是 Cloudflare 提供的google证书(Google Trust WE1)
国内使用的 TLC DV TLS CA 证书亦完全可信
Cloudflare SSL 模式配置无异常
架构运行时间长,历史稳定
地址栏 HTTPS 状态完全正常
直觉会非常坚定地告诉你:
这不可能是配置问题。
四、根因分析(真正的问题)
根因一句话总结:
海外回源服务器上,没有为主站域名显式配置 server_name。
实际发生了什么?
1. Cloudflare 与回源服务器完成 TLS 握手
2. 证书校验通过
3. HTTP 请求携带 Host: 主站域名
4. Nginx 未找到匹配的 server_name
5. 请求 fallback 到第一个可用虚拟主机
6. 该虚拟主机恰好是短链接站
7. 发生窜站
五、三种 SSL 模式为何表现不同
Full (Strict):Invalid SSL certificate
Cloudflare 严格校验源站
TLS 层成功,但应用层返回异常站点
Cloudflare 判定源站异常并返回 Invalid SSL
Full:窜站
不校验源站证书
HTTP 正常返回,但内容来自错误站点
Flexible:403
Cloudflare 使用 HTTP 回源
源站强制 HTTPS 或 Host 校验失败
403
六、最终解决方案
在海外回源服务器上,为主站域名补齐虚拟主机配置:
server {
listen 443 ssl;
server_name www.kk9.org.cn cdn.kaik9.fun;
ssl_certificate /www/wwwroot/cdn/fullchain.pem;
ssl_certificate_key /www/wwwroot/cdn/privkey.pem;
location / {
proxy_pass http://100.90.8.2;
}
}
补齐后:
Full (Strict):恢复正常
海外访问:正常
不再发生窜站
七、事故反思
1. HTTPS 挂锁不代表请求正确
SSL 只能证明「加密成功」,不能证明「站点正确」。
2. 多站点必须设置 default_server 黑洞
避免任何未匹配域名被错误接收。
3. Cloudflare 放大问题,但不制造问题
问题始终存在,只是被不同模式触发。
八、总结
这不是证书事故,而是一次「回源虚拟主机未显式配置」导致的经典事故。
它会伪装成:
SSL 错误
CDN 故障
证书不受信任
但本质只有一行配置。
server_name www.kk9.org.cn cdn.kaik9.fun;
