banner
Kerronex

Kerronex

兴趣使然,一个随手记笔记本

Cloudflare代理后访问超时

由于一些原因,我使用 Cloudflare 来代理我服务器上的服务,主要是想简单隐藏服务器 IP,可能还有加速的效果~但是我遇到了一些费解的问题。

我用 docker 跑了两个服务,一个打算映射在 8443 端口使用 https;另一个跑在 8002 端口使用了普通的 http,不支持 SSL。

配置好 DNS 后,开始使用域名以 https 访问 8443 端口,发现超时;然后访问 8002 时也超时;
一开始以为是服务有问题,排查了一番没发现有问题,使用 IP 访问测试发现是正常的。

中间问 ChatGPT 耽误了好长时间,不管是 ChatGPT 还是 Bing 还是 Bard 回答的原因都是瞎说;AI 果然也不是很靠谱啊。。。耽误时间

根据我的理解,既然 IP 访问没有问题,那么服务器配置应该问题不大,应该是 Cloudflare 的配置那里不对;
HTTPS 访问 8443 既然超时,那应该是 SSL/TLS 配置有问题,根据文档很容易理解其 4 种代理方式,最常用的应该是灵活和完全。

  • 当使用 Flexible 灵活模式时,无论你使用 http 还是 https 访问,CF 都会以 http 的方式访问源站,此时源服务器不需要 SSL 证书;
  • 使用 Full 完全模式时,会使用访问者请求的方案连接到源。也就是如果访问者使用 http,则 Cloudflare 使用纯文本 HTTP 连接到源,反之亦然。
    这种模式不会校验源站的 SSL 证书,所以可以使用自签的证书或者 CF 签发的证书。

我当前配置的是灵活模式,根据描述会以 HTTP 的方式访问源站,那确实不会通,改为完全模式后,测试 8443 可以正常访问了。


但是这解释不了为什么 8002 端口会超时,8002 是支持 HTTP 的,但是依然无法访问,当然改成完全模式后 8002 这个就无法使用 HTTPS 了,我换了一个域名,使用灵活模式,依然无法访问 8002。

最后我在官方文档的灵活模式解释部分找到了原因:

Flexible mode is only supported for HTTPS connections on port 443 (default port). Other ports using HTTPS will fall back to Full mode.
https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes/flexible/#limitations

也就是灵活模式这种方式有一个限制,就是仅支持 443 端口的 https 连接,如果使用了其他端口会回退到 Full 模式。
也就是如果想用 CF 的 HTTPS,就不要自定义端口,把服务端口从 8002 切换到 80 后确实正常了。

但是,我并不想使用 80 端口提供服务,还想上 HTTPS,最后给服务器上了个 Nginx 来支持 SSL。
但是依然访问超时。

现在的情况就有点棘手:
Cloudflare 当前处于 Full 模式,使用 HTTPS 访问的情况下,8443 正常;8002 超时;
这两个服务都支持了 SSL,通过 IP 访问都正常;

如果都超时那可以说是 Cloudflare 配置有问题,现在 IP 访问都可以,Cloudflare 代理后一个行一个超时,用的是同一套配置,同一个域名,这就很迷。

直觉上肯定是 Cloudflare 有什么限制或配置,期间一直在问各种 LLM 模型,根据回答排查都没问题,再问就是乱编的回答了。。。

后来都快放弃了,决定翻翻 Cloudflare 的文档,也去 Google 了下,最终发现文档有这么一篇:

HTTP ports supported by Cloudflare

  • 80
  • 8080
  • 8880
  • 2052
  • 2082
  • 2086
  • 2095

HTTPS ports supported by Cloudflare

  • 443
  • 2053
  • 2083
  • 2087
  • 2096
  • 8443

https://developers.cloudflare.com/fundamentals/get-started/reference/network-ports/

看到这我也是挺无语的,就那么凑巧碰到了 8443 这个白名单。。。。

既然这样,8002 看来是没法用了?
在搜索过程中,发现规则里有个 Origin Rules ,可以根据主机名进行重写端口;
那么可以 DNS 里新加一个二级域,根据 Origin Rules 匹配,然后重写端口到源站的 8002,这样就可以直接使用 443 来进行访问。
It is working.

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。