简短版本:我在为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.html
和error.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>
所有这些东西现在已经存在并且已经存在。