Ubuntu
如何使 Tomcat 8.5 RewriteValve 與 AJP1.3 JKMount 一起工作?
前提
在安裝了最新 Apache2 的 Ubuntu 16.04 伺服器上,我有不同的虛擬主機,
每一個都正確配置(並使用 Let’s Encrypt 保護):
- /etc/apache2/sites-enabled/my.site.com-le-ssl.conf
- /etc/apache2/sites-enabled/my.other.site.com-le-ssl.conf
指向下的靜態內容:
- /var/www/my.site.com/
- /var/www/my.other.site.com/
這很好用:
通過呼叫https://my.site.com/
我看到包含在/var/www/my.site.com/
.然後我安裝了 Tomcat 8.5.9並使用反向代理保護它,因此添加:
<VirtualHost *:443> . . . JKMount /* ajp13_worker . . . </VirtualHost>
到**/etc/apache2/sites-enabled/my.site.com-le-ssl.conf**。
這也可以正常工作:
通過現在呼叫,https://my.site.com/
我看到了 Tomcat 首頁。期望的目標
我想達到以下結果:
- 通過呼叫
https://my.site.com/
我想查看靜態站點(/var/www/my.site.com/
);- 通過打電話
https://my.site.com/dynamic
我想看看Tomcat的家;
因此,通過呼叫,https://my.site.com/dynamic/myApp
我希望在;myApp.war
下執行發布。tomcat/webapps
嘗試的解決方案
我的想法如下:
- 使 Apache JKMount-ing 僅具有
/dynamic
上下文的請求,因此而不是:<VirtualHost *:443> . . . JKMount /* ajp13_worker . . . </VirtualHost>
,我用過:
<VirtualHost *:443> . . . JKMount /dynamic/* ajp13_worker . . . </VirtualHost>
這似乎在 Apache方面有效;呼叫
my.site.com
將打開靜態內容,而呼叫my.site.com/dynamic
將給Tomcat 404。現在我需要重寫 URL 以刪除
dynamic
上下文,以使其對 Tomcat 透明,並且我在過去 3 小時內嘗試使用Tomcat RewriteValve來做到這一點:
- 我
tomcat/conf/server.xml
通過添加閥門進行了編輯:<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> . . . <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" /> </Host>
- 我創建了一個
tomcat/conf/Catalina/localhost/rewrite.config
文件,包含正確的規則(在這裡測試):RewriteRule ^dynamic/(.+)$ /$1
出於某種原因,這不起作用。Tomcat 的 RewriteValve 規則要麼被忽略,要麼出現故障,或者我認為整個事情的方式有問題……我不是系統管理員,所以我不會對這裡的一些幼稚錯誤感到驚訝。
你看到問題出在哪裡了嗎?或者另一種方式來完成這項工作?
我已經通過使用
mod_proxy_ajp
而不是解決了它mod_jk
。Apache 的my.site.com-le-ssl.conf
<VirtualHost *:443> . . . ProxyPass /dynamic/ ajp://localhost:8009/ ProxyPassReverse /dynamic/ ajp://localhost:8009/ . . . </VirtualHost>
Tomcat 的rewrite.config
RewriteRule ^dynamic(.+)$ dynamic/$1/ [R]
現在它可以按需要工作。