子域上AWS S3静态站点上的https错误

时间:2017-02-20 21:32:05

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

简短版本:我在为Web托管设置的AWS S3存储桶上的静态网站上收到https错误,但不是https。它位于指向我的AWS Route 53托管区域上的S3存储桶的CNAME记录中,其中A记录将转到另一个站点,该站点使用https。

长版:

我在AWS EC2实例上的我的apex网址(idoimaging.com)上托管了一个Rails网站。我希望,独立于此,将博客作为静态网站(Jekyll)作为子域blog.idoimaging.com来托管。

要通过简单的设置进行测试,我尝试制作一个最小的静态子域网站hello.idoimaging.com。我创建了一个名为hello.idoimaging.com的测试存储桶,其中包含了index.htmlerror.html个小文件。我在存储桶属性中启用了网站托管,并向存储桶添加了一个包含所有内容的策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Allow Public Access to All Objects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::hello.idoimaging.com/*"
        }
    ]
}

我可以直接在其端点hello.idoimaging.com.s3-website-us-east-1.amazonaws.com访问存储桶,然后我会看到index.html页面。到目前为止一切都很好。

现在我想设置一个CNAME,以便我可以访问hello.idoimaging.com的静态网站。在AWS Route 53中,我为idoimaging.com域提供了托管区域,并在该域中创建了名为“hello.idoimaging.com”且值为“hello.idoimaging.com.s3-website-us-east-1.amazonaws.com”的CNAME。

挖掘结果看起来不错:

$ dig hello.idoimaging.com
...
;; QUESTION SECTION:
;hello.idoimaging.com.      IN  A
...
;; ANSWER SECTION:
hello.idoimaging.com.   226 IN  CNAME   hello.idoimaging.com.s3-website-us-east-1.amazonaws.com.
hello.idoimaging.com.s3-website-us-east-1.amazonaws.com. 60 IN CNAME s3-website-us-east-1.amazonaws.com.
s3-website-us-east-1.amazonaws.com. 3 IN A  52.216.64.90
...
;; AUTHORITY SECTION:
s3-website-us-east-1.amazonaws.com. 1778 IN NS  ns-1133.awsdns-13.org.
s3-website-us-east-1.amazonaws.com. 1778 IN NS  ns-1919.awsdns-47.co.uk.
s3-website-us-east-1.amazonaws.com. 1778 IN NS  ns-490.awsdns-61.com.
s3-website-us-east-1.amazonaws.com. 1778 IN NS  ns-661.awsdns-18.net.

最初,当我试图访问hello.idoimaging.com时,我刚刚超时。我在某处读了一篇关于右键点击桶中对象的“公开”的帖子。这对我来说听起来并不合适,因为我认为这就是存储桶政策的用途,但是当我尝试它时,我得到了改变。在权限下我现在有Grantee:每个人都有权限打开/下载,虽然它仍然无法正常工作,但现在我收到HTTPS安全错误而不是超时。因此,“公开”(我以前从未使用过)似乎有所作为。进展,我猜?

使用curl我可以获取hello.idoimaging.com并检索index.html文件,不用担心,即使我使用--proto https。但是,wget和任何浏览器都不会。

现在向hello.idoimaging.com的所有请求都被强制为https://,但是“您的连接不是私有”/“此站点使用HTTP严格传输安全(HSTS)”以及不同的不同消息浏览器。这种强制到https的行为是正常的吗?我问的原因是我的npex服务器中的顶点站点将http请求重定向到https。但是,如果我请求hello.idoimaging.com,DNS将为我的S3网站选择CNAME,而不是我的顶点网站的A记录,对吧?似乎他们无法相关。 apex网站使用letsencrypt.org的本地证书进行保护。

一旦我开始这样做,我想使用CloudFront,但我现在对S3网站有足够的困难。

似乎问题是由于hello.idoimaging.com(类似于那样)强制要求https的请求而导致问题,而这是失败的。寻求建议。如果我的顶点站点出现问题是https而子域名不是https,那么我似乎会通过尝试在子域上设置https来使其复杂化,因为它将使用来自apex站点的不同证书。 / p>

所有这些东西现在已经存在并且已经存在。

1 个答案:

答案 0 :(得分:1)

  • 您是否将index.html指定为索引文档?
  • 此外,为存储桶设置自定义DNS的推荐方法是使用带有别名类型的 A 记录类型。在别名目标中放置s3-website-us-east-1.amazonaws.com.

P.S。关于SSL,s3不为具有自定义DNS的网站提供ssl,唯一的选择是在前面添加CloudFront。

P.S。清除浏览器的缓存,或尝试隐身模式: enter image description here