Ubuntu

如何使 Tomcat 8.5 RewriteValve 與 AJP1.3 JKMount 一起工作?

  • May 4, 2017

前提

在安裝了最新 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]

現在它可以按需要工作。

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