我有一个需要在SSL上运行的Nginx安装。 我的服务器块如下这个域,强制example.com
和www.example.com
路由到https://example.com
。
server { listen 9.9.9.9:80; server_name example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.example.com; return 301 $scheme://example.com$request_uri; } server { ## SSL settings listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; server_name example.com; root /home/example; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; include common.conf; include ssl.conf; }
这基本上起作用。 让我们encryption的东西正确安装。 不过,我也有一些子域名是Cloudfront的CNAME。 所以这些就像cdn.example.com
。 我怎样才能确保他们也工作,并不重新路由到https://example.com ?
在Cloudfront中,为这些CNAME启用默认的Cloudfront证书:
SSL Certificate - Default CloudFront Certificate (*.cloudfront.net)
这是一个问题吗?
问题是,当我访问这个网站, https://example.com
cdn.example.com
,整个内容加载,但图像,CSS和JS文件(通过cdn.example.com
Cloudfront cname加载)不加载。 Chrome会在这些资源的位置栏中显示一个红色的“不安全”,并显示一条大错误消息: http : //imgur.com/4sGWuIY
将我自己的CNAME CDNpath与域一起包含的正确方法是什么? 谢谢你的指点。
让我们从一些假设开始吧:
你的DNS区域文件看起来像这样:
$ORIGIN example.com IN A 9.9.9.9 www IN A 9.9.9.9 cdn IN CNAME some-subdomain-at.cloudfront.net.
在这种情况下,您的web服务器(9.9.9.9)不应该看到任何属于cdn.example.com的请求。
为什么?
https://cdn.example.com/default.css
,浏览器会询问cdn.example.com的IPv4 / IPv6(A / AAAA)地址,获取none并尝试使用CNAME, some-subdomain-at.cloudfront.net.
作为答案。 现在浏览器将尝试获取some-subdomain-at.cloudfront.net.
的IP地址some-subdomain-at.cloudfront.net.
并开始与这个地址的通信,就好像它在哪一个Aloggingcdn.example.com
。