簡體   English   中英

AWS Elastic Load Balancer有選擇地啟用SSL

[英]AWS Elastic Load Balancer selectively enable SSL

我目前有一個基於Rails的Web應用程序,該應用程序需要一小部分頁面才能通過HTTP進行服務-但希望通過HTTPS來提供其余的頁面。 在我當前的AWS設置中,SSL在彈性負載均衡器處終止,並且與我的應用程序服務器的所有通信都是通過HTTP進行的。 因此,不適合使用機架式SSL Enforcer之類的解決方案。 目前,我在每個頁面中提供以下JS代碼段以處理重定向:

<% if should_be_ssl? %>
<script>
  if (window.location.protocol != "https:"){
    window.location.href = "https:" + window.location.href.substring(window.location.protocol.length);
  }
</script>
<% else %>
<script>
if (window.location.protocol != "http:"){
  window.location.href = "http:" + window.location.href.substring(window.location.protocol.length);
}
</script>
<% end %>

每次訪問其中一個頁面時,這都會導致相對顯着的性能下降。 有誰知道一種通過SSL選擇性地提供某些頁面並在負載均衡器級別進行控制的方法嗎?

ELB本身當前不支持此功能,但是ELB提供了X-Forwarded-Proto標頭。 您可以檢查此內容以查看來自客戶端的請求是否通過HTTPS。 然后,如有必要,您可以提供重定向響應,而不是頁面內容。 有關更多信息,請參閱AWS專家的博客文章

您要么必須實現此邏輯

  1. 帶有中間件,例如,rack-ssl-enforcer

    查看關於機架ssl強制執行器的文檔,它似乎支持開箱即用的X-Forwarded-Proto ,因此您可能根本不需要執行任何操作。 您可以在源代碼中看到標頭受到尊重。

  2. 在您的應用程序中(可能帶有重定向響應,而不是在客戶端上)

  3. 在反向代理中,例如您的應用服務器和ELB之間的代理

     acl is_http hdr(X-Forwarded-Proto) http acl account_login url_beg /account/login redirect scheme https code 301 if account_login is_http 

根據您的配置,如果ELB與正在檢查標頭的對象之間還有其他反向代理,則可能需要配置它們以正確傳遞X-Forwarded-Proto標頭。 例如,參見此問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM