簡體   English   中英

Apache和Tomcat的負載平衡與URL重定向相結合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM