Nginx
使用 https (SSL) 在 Nginx 上執行多個域和子域
我有一個需要在 SSL 上執行的 Nginx 安裝。對於該域,我的伺服器塊如下,它強制
example.com
andwww.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 在這些資產的位置欄中顯示紅色“不安全”,並顯示如下大錯誤消息:http: //imgur.com/4sGWuIY將我自己的 CNAME CDN 路徑與域一起包含的正確方法是什麼?感謝您的任何指點。
讓我們從一些假設開始:
- 您的 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 的請求。
為什麼?
- 載入example.com時,網路瀏覽器將從 DNS 系統獲取 IP 9.9.9.9並在那裡發送請求。
- 訪問範例文件時
https://cdn.example.com/default.css
,瀏覽器會詢問cdn.example.com的 IPv4/IPv6 (A / AAAA) 地址,獲取 none 並嘗試 CNAME,它將得到它some-subdomain-at.cloudfront.net.
作為答案。現在瀏覽器將嘗試獲取 的 IP 地址some-subdomain-at.cloudfront.net.
並開始與該地址通信,就好像它在 A 記錄中一樣cdn.example.com
。