CloudFlare 工作人员获取 HTTPS 在 workers.dev 子域上工作,但在自己的子域上不工作,出现 525 错误

CloudFlare workers fetch HTTPS works on workers.dev subdomain but not on own subdomain getting 525 error

我有一个简单的工作人员,它只是在其他地方对 HTTPS 端点进行提取。

代码实际上只是:

return await fetch('https://something.com/someResource')

当我在本地测试 (wrangler dev) 甚至发布到工作子域时,这工作正常。当我卷曲 https://foo.bar.workers.dev/myEndpoint 时,我得到与 https://something.com/someResource.

相同的响应

但是我想 运行 从我自己的域(通过 cloudflare 管理)进行此操作,因此工作人员也有 foo.mydomain.com/* 的路由和 AAAA 到 [=17= 的记录] 对于 foo 根据 CloudFlare 文档。 DNS 工作正常,URL 可以访问,但是当我尝试访问 https://foo.mydomain.com/myEndpoint 时,CloudFlare 的工作日志显示后台提取失败并出现 525 错误(SSL 握手失败)。

我根据一些 CloudFlare 论坛帖子尝试过的事情:

仅供参考,我无法控制原始服务器,因为它是我工作的外部 API。

为什么相同的请求在本地和 *.workers.dev 而不是我自己的域中有效?

您的页面规则没有生效。页面规则适用于 foo.mydomain.com/*,但它必须匹配子请求 URL,在本例中为 https://something.com/someResource,但不匹配。原始工作请求是否匹配并不重要——在这种情况下,重要的是子请求 URL 是否匹配。

很遗憾,您无法创建与您自己以外的域相匹配的页面规则。

相反,您需要做的是颠倒过来。默认情况下将您的 SSL 模式设置为“完整”,然后使用页面规则将其设置为您自己域的“灵活”。

(注意:“SSL 握手失败”错误本身实际上是 Workers 中的一个已知错误,当​​您尝试使用 HTTPS 与区域外的主机交谈时会发生这种情况,但您有“flexbile” SSL 设置。当与您自己的域以外的域通信时,我们不使用灵活的 SSL,但是有一个错误导致请求失败,而不是像它应该的那样只使用完整的 SSL。)