Ubuntu

如果流量通過 CloudFront 路由,網站是否需要在 nginx 文件中配置埠 443?

  • December 27, 2019

當我注意到如果我輸入 http s ://example.com 我收到綠色連接是安全的消息時,我正在Google搜尋如何在我的 nginx 文件中設置 ssl/tls 配置。在設置 route53 和 cloudfront 之前,我希望它不會像以前那樣工作。我必須提到我的整個網站是通過雲端提供的,而不是來自 S3 儲存桶。

這是我的 /etc/nginx/conf.d 的樣子。我正準備添加 443 件,但似乎不需要。為什麼不再需要它;是因為客戶端連接的是 .cloudfront.net 域嗎?如果我不需要更改任何其他內容,那麼唯一缺少的就是弄清楚如何始終更喜歡 https,這樣使用者就不會看到連接不安全的消息。

#

server {
listen 80;

server_name example.com;


location / {
proxy_pass http://localhost:3000;
}
}

#

在這種情況下,您可以將 EC2 實例配置為偵聽埠 80。事實上,將 TLS 添加到 nginx 配置只會減慢您的網站提供內容的速度,因為在向 CloudFront 邊緣提供內容時,流量將被加密應要求提供地點。但是,除非您將 EC2 實例鎖定為僅可從 AWS CloudFront 訪問或僅向其提供內容,否則您可能會為向 CloudFront CDN 提供內容的中間人攻擊敞開大門。

我發現這個 Reddit 執行緒有一些關於如何將 EC2 實例鎖定為只能從 CloudFront 訪問的建議:https ://www.reddit.com/r/aws/comments/82nolm/restricting_access_to_my_origin_webserver_so_only/

您提到 http s ://example.com 已經為您工作了。我必須假設這意味著您已將自定義example.com作為**備用域名**添加到您的 CloudFront 分配中,然後為您的域配置了 ACM 頒發的證書。然後,您已將 CNAME 添加example.com到您的唯一 CloudFront 終端節點名稱中,例如e8anx24185c3y.cloudfront.net.

CloudFront 在邊緣站點記憶體您的所有內容。當您的最終使用者向其請求內容時,https://example.com將從物理上離他們最近的邊緣位置返回。在該請求期間,它實際上根本不與您的伺服器通信,除非最近的邊緣位置沒有所請求內容的本地記憶體。但是,鑑於 CloudFront 還沒有內容,最終使用者不會重定向到您的 EC2 實例。相反,CloudFront 將響應從您的 EC2 實例下載到邊緣站點,然後繼續通過在客戶和 CloudFront 邊緣站點之間啟動的 TLS 連接將該內容提供給最終使用者。

要回答您的最後一個問題,您可以在 CloudFront 分配配置中強制http://example.com升級到連接。https://example.com此設置是在行為上配置的。瀏覽到您的 CloudFront 分配並點擊頂部的行為選項卡。從那裡,選擇您的預設行為(或從您的 EC2 提供內容的任何行為),然後點擊Edit。對於Viewer Protocol Policy,選擇Redirect HTTP to HTTPS,然後點擊底部的Yes, Edit以保存您的更改。

引用自:https://serverfault.com/questions/995669