AWS 403 forbidden from Cloudfront Worker Fetch



当使用从无服务器Cloudflare Worker获取到我自己的托管在AWS EC2实例上的dotnetcore api时,我得到了403禁止响应。GET和POST。示例worker代码(也测试了init头,如user agent, accept等,但结果相同):

fetch('http://54.xxx.xxx.xxx/test')

然而,对api ip url的基本获取从本地javascript返回200和一个简单的托管网页。还有邮差和卷发

Cloudflare worker也可以毫无问题地获取其他api。

fetch('http://jsonplaceholder.typicode.com/posts')

最后我不得不使用AWS DNS url。

fetch('http://ec2-54-xxx-xxx-xxx.us-west-1.compute.amazonaws.com/test')

这个AWS elasticbeanstalk设置是尽可能基本的。单一t3a。具有默认安全组的Nano实例。我没有看到任何关于IP和DNS url使用的文档,但它们应该解析到相同的IP。此外,我没有看到任何选项来处理cloudflare方面的DNS问题。

stackoverflow也没有类似的问题。

所以在经历了很多痛苦之后,我只是在这里记录解决方案。

在amazon实例摘要下,您可以找到"公共IPv4地址"one_answers"Public IPv4 DNS"

从Cloudflare工作器获取公共dns工作

fetch('http://ec2-54-xxx-xxx-xxx.us-west-1.compute.amazonaws.com/test')

和获取公共ip返回状态403与statusttext "Forbidden">

fetch('http://54.xxx.xxx.xxx/test')

Cloudflare Workers可以发出出站HTTP请求,但只针对域名。Worker不可能向IP地址发出取回请求。

我无法确认你观察到的确切行为(你的帖子是9个月前,从那时起,Cloudflare Workers发生了一些变化),在过去的一个月左右,我观察到在IP地址上调用fetch()导致工作人员看到"错误1003访问被拒绝";作为获取响应。

没有太多的信息,但是这里有关于错误1003的可用信息:

错误1003 Access Denied: Direct IP Access Not Allowed

常见原因—客户端或浏览器直接访问Cloudflare IP地址

解析-浏览到您的URL中的网站域名,而不是Cloudflare的IP地址。

正如您所发现的,如果您使用DNS名称,则fetch工作正常。

最新更新