我正在尝试使用S3访问一些可用的网页,并使用如下所示的网址正常工作:http://my-crazy-bucket.s3-website-us-east-1.amazonaws.com
事情是..我需要使用快递隐藏这些页面的网址在javascript书面代理应用程序后面。在使用弹性beanstalk而不是S3之前,我能够做到这一点。但是当我尝试将这些静态页面从EB迁移到S3时,并使用代理URL访问该s3存储桶。这导致以下错误:
404 Not Found
Code: NoSuchBucket
Message: The specified bucket does not exist
BucketName: my-proxy-url.com
RequestId: some stuff...
HostId: some more stuff...
我希望在此错误的BucketName
中看到 my-crazy-bucket 而不是 my-proxy-url.com 。
我确实将CORS配置为桶配置中的许可,如下所示:
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>https://my-proxy-url.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
但问题仍然存在。
你们是否认为我需要任何额外的S3配置或问题出在我的代理中(即使它在指向旧弹性beanstalk实例中托管的相同静态页面之前有效)?
答案 0 :(得分:2)
不是CORS问题。
在发送出站请求之前,您必须在代理内部更改(重写)传入请求的HTTP Host:
标头,以便S3了解相关存储桶是my-crazy-bucket.s3-website-us-east-1.amazonaws.com
。
仅将请求发送到S3是不够的。需要将其发送到正确的存储桶,并且S3通过查看存储桶端点或存储桶名称的传入Host:
标头来确定哪个存储桶。
如果没有看到您的代理代码,我就不能更具体了。