AWS S3公共存储桶托管代理后面的静态网页

时间:2017-04-24 14:01:22

标签: amazon-web-services express amazon-s3 proxy cors

我正在尝试使用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实例中托管的相同静态页面之前有效)?

1 个答案:

答案 0 :(得分:2)

不是CORS问题。

在发送出站请求之前,您必须在代理内部更改(重写)传入请求的HTTP Host:标头,以便S3了解相关存储桶是my-crazy-bucket.s3-website-us-east-1.amazonaws.com

仅将请求发送到S3是不够的。需要将其发送到正确的存储桶,并且S3通过查看存储桶端点或存储桶名称的传入Host:标头来确定哪个存储桶。

如果没有看到您的代理代码,我就不能更具体了。