【问题标题】:How do I get all requests to a bucket in S3 to redirect to corresponding requests to another bucket in S3?如何获取对 S3 中的存储桶的所有请求,以将相应请求重定向到 S3 中的另一个存储桶?
【发布时间】:2015-12-02 21:25:18
【问题描述】:

我正在使用 Amazon 的 S3 文件存储 Web 服务托管一个静态网站。我托管它的存储桶是“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 指示用户只需选择“将所有请求重定向到另一个主机名”选项并输入将用户定向到的名称。我已经这样做了,但这会导致我目前遇到的问题:所有请求都重定向到根域,而不是相应的网址。

【问题讨论】:

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


    【解决方案1】:

    “将所有请求重定向到另一个主机名”正是您想要的。

    但是,必须正确配置 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 记录。 Route 53 具有称为 Alias 记录的内置集成功能,允许在没有 CNAME 记录的情况下进行此映射 - 您需要配置这些并将您的 DNS 提供程序切换到 Route 53,与您已阅读的教程的第 3 节和第 4 节一致链接到问题中。


    还请注意,使用一点命令行技巧来强制将请求发送到 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 时,重定向会在保留路径的情况下按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 2020-04-10
      • 1970-01-01
      • 2021-01-20
      • 2016-08-05
      • 2020-04-23
      相关资源
      最近更新 更多