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 论坛帖子尝试过的事情:
- 添加页面规则
foo.mydomain.com/*
-> SSL Mode: full
因为我的整体 SSL 设置设置为 flexible
.
- 将抓取中的主机header设置为源域(
fetch(url, {headers: {'Host': 'something.com'}})
仅供参考,我无法控制原始服务器,因为它是我工作的外部 API。
为什么相同的请求在本地和 *.workers.dev
而不是我自己的域中有效?
您的页面规则没有生效。页面规则适用于 foo.mydomain.com/*
,但它必须匹配子请求 URL,在本例中为 https://something.com/someResource
,但不匹配。原始工作请求是否匹配并不重要——在这种情况下,重要的是子请求 URL 是否匹配。
很遗憾,您无法创建与您自己以外的域相匹配的页面规则。
相反,您需要做的是颠倒过来。默认情况下将您的 SSL 模式设置为“完整”,然后使用页面规则将其设置为您自己域的“灵活”。
(注意:“SSL 握手失败”错误本身实际上是 Workers 中的一个已知错误,当您尝试使用 HTTPS 与区域外的主机交谈时会发生这种情况,但您有“flexbile” SSL 设置。当与您自己的域以外的域通信时,我们不使用灵活的 SSL,但是有一个错误导致请求失败,而不是像它应该的那样只使用完整的 SSL。)
我有一个简单的工作人员,它只是在其他地方对 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 论坛帖子尝试过的事情:
- 添加页面规则
foo.mydomain.com/*
->SSL Mode: full
因为我的整体 SSL 设置设置为flexible
. - 将抓取中的主机header设置为源域(
fetch(url, {headers: {'Host': 'something.com'}})
仅供参考,我无法控制原始服务器,因为它是我工作的外部 API。
为什么相同的请求在本地和 *.workers.dev
而不是我自己的域中有效?
您的页面规则没有生效。页面规则适用于 foo.mydomain.com/*
,但它必须匹配子请求 URL,在本例中为 https://something.com/someResource
,但不匹配。原始工作请求是否匹配并不重要——在这种情况下,重要的是子请求 URL 是否匹配。
很遗憾,您无法创建与您自己以外的域相匹配的页面规则。
相反,您需要做的是颠倒过来。默认情况下将您的 SSL 模式设置为“完整”,然后使用页面规则将其设置为您自己域的“灵活”。
(注意:“SSL 握手失败”错误本身实际上是 Workers 中的一个已知错误,当您尝试使用 HTTPS 与区域外的主机交谈时会发生这种情况,但您有“flexbile” SSL 设置。当与您自己的域以外的域通信时,我们不使用灵活的 SSL,但是有一个错误导致请求失败,而不是像它应该的那样只使用完整的 SSL。)