首页 > 解决方案 > CloudFlare 工作人员获取 HTTPS 适用于workers.dev 子域,但不适用于自己的子域,出现 525 错误

问题描述

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

代码实际上只是:

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

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

但是,我想从我自己的域(通过 cloudflare 管理)运行它,因此工作人员也有一个根据 CloudFlare 文档的路由foo.mydomain.com/*AAAA记录100::fooDNS 工作正常,URL 是可访问的,但是当我尝试访问https://foo.mydomain.com/myEndpointCloudFlare 的工作日志时,显示后台获取失败并出现 525 错误(SSL 握手失败)。

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

仅供参考,我不控制原始服务器,因为它是我使用的外部 API。

为什么相同的请求适用于本地*.workers.dev而不是我自己的域?

标签: sslfetchcloudflarecloudflare-workers

解决方案


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

不幸的是,您无法创建与您自己的域以外的域匹配的页面规则。

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

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


推荐阅读