Ssl

後端使用帶有 HTTP 的 ELB Https,使用沒有 nginx 或 haproxy 的 Tomcat

  • January 8, 2017

我想設置 ELB 以在負載均衡器處終止 SSL 並通過 HTTP 與後端實例通信。我已經在 ELB 上上傳了有效的證書。當我設置以下配置時

ELB - HTTPS

後端 - HTTP

然後,如果應用程序在應用程序中執行重定向,客戶端/瀏覽器將被重定向到 HTTP 而不是 HTTPS。

雖然,如果我將 ELB 設置為在 HTTPS 上使用 HTTPS 和後端實例(即使使用自簽名證書),一切正常,因為兩種配置都在 HTTPS 上!

我在後端實例上使用Tomcat,並且不想在中間使用任何其他層(例如 nginx 或 haproxy)

我發現這篇文章似乎與您的問題非常相似:http ://willwarren.com/2014/01/27/running-apache-tomcat-with-ssl-behind-amazon-elb/

基本上將 server.xml 更改為此:

<Connector
   port="8080"
   protocol="HTTP/1.1"
   proxyPort="443"
   scheme="https"
   secure="true"
   proxyName="myapp.example.com"
   connectionTimeout="20000"
   URIEncoding="UTF-8"
   redirectPort="8443" />

我很難在網上找到這個,最後我找到了一種方法。

問題是,一旦 http 在內部重定向到 ELB 上的 https 埠,它就會被重定向回埠 80,從而創建一個循環。發生這種情況是因為 ELB 解除安裝了 SSL,然後再次連接到埠 80。

最後經過一些研究,我得到了正確的重寫規則來管理 X-Forwarded-Proto,即使 ELB 解除安裝 SSL tomcat 也可以到達現在原始請求使用 SSL。

這是使用 Tomcat 8 上的 Tomcat Valves 完成的。我相信它也可以在早期版本上完成。我已經使用閥門在 Tomcat 上啟用了重寫規則。之後就像在 Apache 上編寫重定向規則一樣簡單。

以下是步驟:

第 1 步 :打開tomcat conf文件夾下的context.xml b. 在下面粘貼以下行

<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />

注意:這將全域啟用閥門。如果需要為特定主機啟用此功能,則應將其粘貼到該特定域的 server.xml 中

第2步:

一種。打開 conf/server.xml b. </Host>將以下行粘貼到標記上方

<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />

第 3 步:

一種。打開 web.xml 所在的文件夾。例如,如果應用程序託管在 ROOT 下,則 web.xml 將位於 webapps/ROOT/WEB-INF

灣。同樣,如果應用程序託管在 webapps/myappfolder 下,那麼 web.xml 將位於 webapps/myappfolder/WEB-INF

C。在 WEB-INF 文件夾中創建一個新文件 rewrite.config。並粘貼以下重寫規則:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

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