一次 Cloudflare 多站点回源架构导致的 SSL 异常与“窜站”事故完整复盘

Kaik9 发布于 4 天前 69 次阅读


这不是证书事故,而是一次被 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;

此作者没有提供个人介绍。
最后更新于 2026-01-08