按照評論的要求,我已經包括了一個如何通過相同的子域使用Apache ProxyPass
和ProxyPassReverse
。
我這樣做的方式是使用標準的HTTP代理,但它也可以用AJP連接器(我相信)。我認爲這需要其中一個webapps在不同的tomcat下運行(由於server.xml
需要獨特的Host
條目 - 請參閱下面的內容,但我不能100%確定)。
添加以下到Apache的conf文件(如vhosts.conf或vhosts.d/servername.conf):
<VirtualHost *:80>
ServerName 127.0.0.1
ServerName externalName1
ProxyRequests Off
# AJP example
#ProxyPreserveHost On
#ProxyPass/ajp://localhost:8009/
#ProxyPassReverse/ajp://localhost:8009/
ProxyPass /ws http://internalName1:8080/webapp1/
ProxyPassReverse /ws http://internalName1:8080/webapp1/
ProxyPass / http://internalName2:8080/webapp2/
ProxyPassReverse/ http://internalName2:8080/webapp2/
</VirtualHost>
由於增強了ProxyPass條目的順序決定優先級,任何請求爲/ws/*
會總是去第一臺服務器。但第一臺服務器必須有一個/ws
控制器來響應這些請求 - 換言之,/ws
不是應用程序的上下文路徑,而是Web應用程序的內部路徑。 webapp2
可以包含路徑,其中包括/ws
但它們將被簡單地忽略,因爲所有請求都會轉到webapp1
。
每個Web應用程序需要在tomcat server.xml
文件Host
項,喜歡的東西:
<Host name="externalName1" debug="0" appBase="webapps/webapp1" unpackWARs="true" autodeploy="true">
<Alias>serverName1AltName</Alias>
<Context path="" docBase="" debug="5" reloadable="true"/>
</Host>
我還沒有了好幾年這種配置自己和已經從我們運行一些服務器拉信息,所以我很抱歉,如果有任何錯誤或錯誤。
您不必再部署即可分隔子域。可以讓它們在同一個域上運行,但具有獨特的頂級目錄。我們通過在'/ ws'下的所有服務和應用程序的其餘部分使用除/ WS之外的任何服務來實現這一點。 – nickdos
我認爲你應該將此作爲可能的解決方案。我試圖讓這個在Apache中工作,並遇到問題。如果你不介意發佈一個解決方案,我可以發佈一個不同的問題 - – chrismarx