使用 HTTPS 設置 Elastic Beanstalk 應用程序
我在 Elastic Beanstalk 上有一個正在執行的應用程序,並且希望只能通過 HTTPS 訪問它。因為我希望應用程序自動擴展,所以我需要在負載均衡器級別而不是單個 EC2 實例級別配置 HTTPS。我正在關注本教程,了解如何使用 Elastic Beanstalk 配置 HTTPS。但是,當我完成本教程時,我的域永遠不會載入(在 http 或 https 上),並且我在瀏覽器中收到會話超時。
這是我到目前為止所擁有的:
- Elastic Beanstalk 上的工作應用程序。細節:在預先配置的 Glassfish Docker 容器上執行的 Java EE 應用程序。
- Route 53 中設置到我的 Elastic Beanstalk 應用程序的有效域。
- 來自 GoDaddy 的簽名證書,根據我提供的教程連結創建並上傳到 IAM。
現在,這是我認為出現問題的部分。本教程的第 4 步告訴我,我必須更新我的安全組(關於哪個安全組非常模糊)。因此,我像這樣更新負載均衡器安全組(刪除 http 請求並僅支持 https):
然後,在 Elastic Beanstalk 環境配置設置中,我將其設置為:
(如果我關閉偵聽器埠,則域永遠不會在 http 或 https 上傳入)。使用這些設置,如果我轉到我的域(例如:myapp.com),它將繼續載入,直到瀏覽器顯示超時異常。如果我指定協議(例如:https://myapp.com),它將繼續載入,直到瀏覽器顯示超時異常。如果我使用指定的 HTTPS 協議轉到特定連結(例如:https://myapp.com/login.xhtml),那麼它將載入(注意:應用程序在嘗試應用 SSL 之前工作正常;歡迎頁面設置為伺服器)。我究竟做錯了什麼?
**問題總結:**如何將我的 Elastic Beanstalk 應用程序配置為僅通過 HTTPS 工作?
**期望的結果:**使用者在他們的地址欄中輸入應用程序域(例如:myapp.com),它會將它們帶到我使用 HTTPS 保護的應用程序(例如:https ://myapp.com )。
您不能通過禁用 http 訪問來做到這一點。
您可以在實例的 Web 伺服器中執行此操作。當請求進入時沒有
X-Forwarded-Proto: https
ELB 在通過 https 傳入請求時添加的標頭時,您的 Web 伺服器需要向HTTP/1.1 301 Moved Permanently
瀏覽器發送重定向,Location: https://...
並在響應中指定。除非您的應用程序告訴它,否則新訪問者的瀏覽器無法自動知道它應該使用 https 重試。
有其他更高級的方法可以實現這一點,但它們仍然不涉及 ELB(彈性負載均衡器)或 EB(彈性 beantalk)或安全組配置。