gpt4 book ai didi

apache - Apache 和 Tomcat 的负载平衡与 URL 重定向相结合

转载 作者:行者123 更新时间:2023-11-28 21:51:10 25 4
gpt4 key购买 nike

我现在有一台 Apache 服务器和两台 Tomcat 服务器。它们使用 mod_jk 模块连接。并且配置了负载均衡。所有请求将被重定向到负载均衡器,在 httpd.conf 中:

JKMount /* controller

Controller 是负载均衡器,工作的tomcat服务器是worker1,worker2。

问题是,除了自动负载分配,我还需要一个 url 匹配重定向。具体来说,请求 http://www.example.com/test1/index.html应该去 worker1 (Tomcat) 和 http://www.example.com/test2/index.html去 worker 2。但是在worker1和worker2中,application结构都是webapps/test/结构。

我可以使用 mod_jk url 映射将/test1/分派(dispatch)给 worker1 和/test2/分派(dispatch)给 worker2,但是 PATH 将是/test1/和/test2/而不是/test/。同时,如果我使用 apache redirectMatch 或 url rewrite 将/test1/(/test2/) 更改为/test/,mod_jk 现在不会将 url 分派(dispatch)给不同的 worker,因为它们具有相同的 PATH。

我该如何处理这种情况?

最佳答案

您需要使该应用程序成为 Tomcat 中的根应用程序。您可以通过使用以下内容将 META-INF/context.xml 添加到您的应用来执行此操作:

<Context path="/"/>

我建议您从 webapps 目录中删除其他应用程序。然后您需要更改您的应用程序 web.xml,以便 servlet(s) 现在映射到具有适当上下文的适当 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。

关于apache - Apache 和 Tomcat 的负载平衡与 URL 重定向相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10845312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com