Ssl
在 Tomcat 8.5 中為一個站點/域禁用 SSL
我們目前有一個執行 Tomcat 8.5 的 Ubuntu 伺服器,它託管來自不同域的兩個網站。這是一個奇怪的情況,但長話短說,我們需要為兩個站點之一禁用 SSL,並為另一個站點保持 SSL 正常工作。此伺服器目前有一個 IP 地址。兩個站點名稱的結構如下:
site1.a.net site2.a.com
我們想為 site1.a.net 禁用 SSL,並為 site2.a.com 保持啟用 SSL。這在 Tomcat 8.5 中可行嗎?
[為了不使用任何註冊的域,讓我們使用
site1.example.net
和site2.example.com
],它們是為文件目的而保留的。]從 HTTPS 到 HTTP 的重定向與通過 twitch 從 HTTP 到 HTTPS 的重定向的工作方式相同:當客戶端打開時
https://site1.example.net
,伺服器必須提供受信任的 TLS 證書,site1.example.net
然後才能進行任何重定向。否則將導致瀏覽器中出現安全警告。我會為此使用 Let’s Encrypt 證書。否則你只需要
<Host>
在你的<Engine>
和<Certificate>
你的<Connector>
. 您的site1.example.com
主機需要RewriteValve
執行重定向:<Service name="Catalina"> <!-- HTTP connector --> <Connector port="80" redirectPort="443"/> <!-- HTTPS connector --> <!-- If the client does not use SNI it ends up with site1.example.net certificate --> <Connector port="443" SSLEnabled="true" scheme="https" secure="true" defaultSSLHostConfigName="site1.example.net"> <SSLHostConfig hostName="site1.example.net"> <Certificate certificateFile="conf/site1.example.net.crt" certificateKeyFile="conf/site1.example.net.key" /> </SSLHostConfig> <SSLHostConfig hostName="site2.example.com"> <Certificate certificateFile="conf/site2.example.com.crt" certificateKeyFile="conf/site2.example.com.key" /> </SSLHostConfig> </Connector> <!-- If a client doesn't send a Host: header or puts the IP in the Host: header it ends up on site1.example.net --> <Engine defaultHost="site1.example.net" name="Catalina"> <Host appBase="webapps/site2.example.com" name="site2.example.com"> ... </Host> <Host appBase="webapps/site1.example.net" name="site1.example.net"> <!-- We need it for the redirect --> <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" /> </Host> </Engine> </Service>
為了配置
RewriteValve
你只需要創建一個conf/Catalina/site1.example.net/rewrite.config
包含內容的文件# If the client connected through HTTPS RewriteCond %{HTTPS} on # Temporarily redirect to the HTTP version RewriteRule ^ http://site1.example.net%{REQUEST_PATH} [R,L]