2014-02-16 109 views
0

我正在使用Elastic Beanstalk,並且在配置SSL時遇到了一些麻煩。彈性負載均衡器和https

我有一個由負載平衡器和單個EC2實例組成的環境。負載平衡器在端口443和80上具有偵聽器。環境中的EC2實例在端口80上運行tomcat。我在負載平衡器中有一個證書,並且我能夠通過端口443和80訪問站點,一切都是工作得很好。

問題是,我希望所有請求都被重定向到端口443,即使是端口80上的端口也是如此。我已經搜索了高和低的方法來執行此操作,而無需更改我的安全配置。這是一個使用Spring安全性和MVC在Tomcat 7上運行的小型webapp。我試着用

<sec:intercept-url pattern="/**" requires-channel="https"/> 

但我有幾頁是沒有過濾器鏈這樣

<sec:http pattern="/login.html" security="none" /> 

這似乎喜歡的事,可以解決在負載平衡器的一部分,但我沒有太多的經驗設置SSL。任何幫助表示讚賞。

回答

2

您的ELB接受443和80上的連接,但它會終止SSL並僅在80上聯繫您的代碼。SSL基本上是從瀏覽器到ELB。 ELB到Beanstalk上的後端代碼始終爲80.

因此,任何期望基於傳入協議匹配的規則都不起作用。相反,您應該使用此標題「X-Forwarded-Proto:」(將由ELB設置),然後執行轉發規則。

+0

我會嘗試創建一個使用該標頭的過濾器。我想我希望有一種方法可以讓ELB在請求到達我的代碼之前執行重定向。 – user3316434

+0

過濾器正常工作,通過檢查此標題,我可以重定向到https以獲取必要的頁面。我是一個新用戶,不能回答我自己的問題,但我會在我能夠時發佈一些代碼。謝謝您的幫助。 – user3316434

+0

如果ELB具有這樣的功能,那很好,但是他們沒有。我們需要按照我在應用程序代碼中建議的方式來完成。很好,你能夠做到! –