如何在S3中获取对存储桶的所有请求以重定向到S3中对另一个存储桶的相应请求?

时间:2015-12-02 21:25:19

标签: redirect amazon-web-services amazon-s3

我正在使用亚马逊的S3文件存储网络服务托管静态网站。我正在托管它的桶是“www.dleybz.com”(我拥有相应的域名)。我还在我的帐户上设置了“dleybz.com”存储桶,并将其设置为将请求重定向到原始存储桶的索引。

不幸的是,它将所有请求重定向到原始存储桶的根目录。因此,虽然“www.dleybz.com/reddit.html”重定向到它应该的位置,“dleybz.com/reddit.html”只是重定向到“www.dleybz.com/index.html”,而我希望它重定向到“www.dleybz.com/reddit.html”。

一种解决方案是简单地克隆原始存储桶中的所有文件并将它们存储在第二个存储桶中,但这有缺点(每次更改时必须上传到两个存储桶而不是一个存储桶,必须存储两倍的数据)。

另一种方法是设置相应的重定向文件,但这需要为原始存储桶中的每个文件创建一个新的重定向html文件,这将非常耗时。

This Amazon guide指示用户只需选择“将所有请求重定向到其他主机名”选项,然后输入要引导用户的名称。我已经完成了这个,但它导致了我目前遇到的问题:所有请求都重定向到根域,而不是相应的网址。

1 个答案:

答案 0 :(得分:2)

"将所有请求重定向到另一个主机名" 完全你想要什么。

但是,必须正确配置DNS才能将请求实际发送到S3存储桶。在您的情况下,问题是 - 您实际上并未向S3发送该主机名的请求。你将它们发送到其他地方。以下回复显然不是来自S3:

$ curl -v dleybz.com/random/path/here.html
* About to connect() to dleybz.com port 80 (#0)
*   Trying 216.239.32.21... connected
> GET /random/path/here.html HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: dleybz.com
> Accept: */*
>
< HTTP/1.1 302 Found
< Location: http://www.dleybz.com
< Date: Wed, 02 Dec 2015 21:56:39 GMT
< Content-Type: text/html; charset=UTF-8
< Server: ghs
< Content-Length: 218
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
<
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.dleybz.com">here</A>.
</BODY></HTML>
* Connection #0 to host dleybz.com left intact
* Closing connection #0

这看起来更像是您正在使用某种域名重定向(我根据回复进行推测)Google Domains Redirection

您的DNS当前不是由Route 53托管的。这基本上是在域的顶点使用存储桶的要求(技术,而不是策略),因为CNAME记录不是&# 39;允许在区域顶点。 Route 53有一个内置的集成功能,称为Alias记录,允许这种映射没有CNAME记录 - 您需要配置这些记录并将DNS提供程序切换到Route 53,与第3节和第4节一致。你已经在问题中链接过的教程。

另请注意,通过一个小命令行hackery强制将请求发送到S3而不是当前正在进行的任何地方,您可以证明存储桶 正常工作 - 只是请求没有到达。

我们会向us-east-1中的S3网站端点发送请求并重写Host:标题:

$ curl -v -H 'Host: dleybz.com' http://s3-website-us-east-1.amazonaws.com/random/path/here.html
* About to connect() to s3-website-us-east-1.amazonaws.com port 80 (#0)
*   Trying 54.231.9.252... connected
> GET /random/path/here.html HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Accept: */*
> Host: dleybz.com
>
< HTTP/1.1 301 Moved Permanently
< x-amz-id-2: bS9KJJ28qo+AVoxGWwLdavXilX+HFe4suNFdlJsFVfoJl/gFTb/eIToafnjpKLLw4syaYG9jaF0=
< x-amz-request-id: 0090A3CCCCC7AD2A
< Date: Wed, 02 Dec 2015 22:14:12 GMT
< Location: http://www.dleybz.com/random/path/here.html
< Content-Length: 0
< Server: AmazonS3
<
* Connection #0 to host s3-website-us-east-1.amazonaws.com left intact
* Closing connection #0

请注意,当请求实际转到S3时,重定向会按预期工作,路径会保留。