[英]Load balancing with Apache and Tomcat combined with URL redirect
我現在有一個Apache服務器和兩個Tomcat服務器。 它們使用mod_jk模塊連接。 並配置負載均衡。 所有請求都將重定向到httpd.conf中的loadbalancer:
JKMount /* controller
控制器是負載均衡器,工作的tomcat服務器是worker1,worker2。
問題是,除了自動加載調度之外,我還需要一個匹配重定向的URL。 具體而言, http://www.example.com/test1/index.html的請求應該發送到worker1(Tomcat),而http://www.example.com/test2/index.html請求發送到worker2。 但是,在worker1和worker2中,應用程序結構都是webapps / test / structure。
我可以使用mod_jk url映射來調度/ test1 /到worker1和/ test2 /到worker2,但是PATH將是/ test1 /和/ test2 / not / test /。 同時,如果我使用apache redirectMatch或url rewrite將/ test1 /(/ test2 /)更改為/ test /,mod_jk現在不會將url分配給不同的worker,因為它們具有相同的PATH。
我該如何處理這種情況?
您需要在Tomcat中將應用程序設置為根應用程序。 您可以通過向您的應用添加META-INF / context.xml來執行此操作,具體如下:
<Context path="/"/>
我建議您從webapps目錄中刪除其他應用程序。 然后,您需要更改您的應用程序web.xml,以便servlet現在映射到具有適當上下文的相應URL:
<servlet-mapping>
<servlet-name>TestApp</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>TestApp</servlet-name>
<url-pattern>/test1</url-pattern>
</servlet-mapping>
第二個JVM中的應用程序需要url-pattern / test2。 對於Apache / Tomcat連接,我使用mod_ajp而不是mod_jk。 以下是Apache在mod_ajp中需要的內容:
<Proxy balancer://cluster>
BalancerMember ajp://127.0.0.1:8015 route=ajp13_node1
BalancerMember ajp://127.0.0.1:8016 route=ajp13_node2
</Proxy>
<Location "/test">
ProxyPass balancer://cluster/test stickysession=JSESSIONID
</Location>
<Location "/test1">
ProxyPass ajp://127.0.0.1:8015/test1
</Location>
<Location "/test2">
ProxyPass ajp://127.0.0.1:8016/test2
</Location>
這假設AJP連接器正在偵聽第一個JVM的8015和第二個JVM的8016。
也許一個簡單的方法是在tomcat worker上使用urlrewrite過濾器。 根據文檔說明,您應該在urlrewrite.xml文件中具有以下規則:
<rule>
<from>^/test[0-9]*/(.*)$</from>
<to type="redirect">/$1</to>
</rule>
因此工作人員會忽略test1或test2 URI部分。 並且apache可以按照您使用mod_jk計划的方式工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.