我安装了一个需要在 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;
}
这基本上是可行的。Lets Encrypt 的东西安装正确。但是,我也有一些子域名是 Cloudfront 的 CNAME。所以这些就像cdn.example.com
。我如何确保它们也能正常工作,并且不会重新路由到https://example.com?
在 Cloudfront 中,已为以下 CNAME 启用默认 Cloudfront 证书:
SSL Certificate - Default CloudFront Certificate (*.cloudfront.net)
这是一个问题吗?
问题是,当我访问此网站时https://example.com
,所有内容都会加载,但图像、CSS 和 JS 文件(通过cdn.example.com
Cloudfront cname 加载)不会加载。Chrome 会在这些资产的位置栏中显示红色的“不安全”,并显示一条大错误消息,如下所示:https://i.stack.imgur.com/cua6p.jpg
将我自己的 CNAME CDN 路径与域名一起包含的正确方法是什么?感谢您的任何指点。
答案1
让我们从一些假设开始:
你的 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.
在这种情况下,您的网络服务器(9.9.9.9)永远不会看到任何属于 cdn.example.com 的请求。
为什么?
- 加载时示例.com网络浏览器会获取 IP9.9.9.9来自 DNS 系统并向那里发送请求。
- 访问示例文件时,
https://cdn.example.com/default.css
浏览器会要求输入 IPv4/IPv6 (A / AAAA) 地址cdn.example.com,没有结果,然后尝试 CNAME,它将得到some-subdomain-at.cloudfront.net.
答案。现在浏览器将尝试获取的 IP 地址some-subdomain-at.cloudfront.net.
并开始与该地址通信,就好像它是的 A 记录一样cdn.example.com
。