2014-08-29 84 views
0

我目前有一個基於rails的web應用程序,它需要通過HTTP提供一小部分頁面 - 但更願意通過HTTPS提供其餘的服務。在我當前的AWS設置中,SSL終止於彈性負載均衡器,所有與我的應用程序服務器的通信均通過HTTP進行。因此,像Rack SSL Enforcer這樣的解決方案並不合適。目前,我服了以下JS代碼片段中的每一頁來處理重定向:AWS Elastic Load Balancer有選擇地啓用SSL

<% 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有選擇地爲某些頁面提供服務的方式,並在負載平衡器級別控制此方法嗎?

回答

1

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

你必須要實現這個邏輯要麼

  1. 與中間件,如機架SSL的實施者

    望着文檔rack ssl enforcer, 它似乎支持X-Forwarded-Proto出來的盒, 所以你可能不需要做任何事情。您可以在 the source中看到標題受到尊重。

  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 
    

之間的HAProxy的根據您的配置,如果你有ELB之間的任何其他反向代理不管查找的時候頭,你可能需要配置這些傳遞X-Forwarded-Proto頭正確。例如,請參見this issue

+0

謝謝,喬!我今天會檢查一下,並告訴你這是否適合我。 – 2014-09-02 11:22:27

+0

嘿,@DanL。它是如何去的? rack-ssl-enforcer是否完成任務? – 2014-09-03 14:41:34

+0

這是,感謝您的幫助! – 2014-09-04 17:28:18

相關問題