使用代理模块和粘性会话通过 Apache 配置 Tomcat
使用 Mod Proxy 通过 Apache Web 服务器配置 Tomcat 负载平衡器非常简单。
如果你遵循命令,一切都会很顺利。下面我们逐步列出了如何在 Tomcat 上配置 Apache 以使用 Mod Proxy 配置负载均衡器。
在生产环境中始终建议进行负载平衡以提高可用性。

配置 Apache Web 服务器
- 在 Apache Web 服务器的 httpd.conf 中启用
proxy_module、proxy_balancer_module和proxy_http_module。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so 添加代理路径以及应用程序上下文根的平衡器名称。
在此示例中,代理路径为示例,平衡器名称为mycluster 。
包括StickySession非常重要。这是因为如果没有此选项,相同的请求将分布在多个 Tomcat 服务器上,从而导致应用程序中出现会话过期问题。
ProxyRequests Off ProxyPass /examples balancer://mycluster stickysession=JSESSIONID ProxyPassReverse /examples balancer://mycluster stickysession=JSESSIONIDBalancerMember http://localhost:8080/examples route=server1 BalancerMember http://localhost:8090/examples route=server2
正如您在上面的配置中看到的,我们添加了一条到BalancerMember的路由,以便我们可以将路由值添加到会话ID中。
接下来,让我们配置 Apache 以在访问日志中打印 JSESSIONID。
- 将以下内容添加到 LogFormat 指令中
%{JSESSIONID}C 原来的:
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""%{JSESSIONID}C"" combined - 重新启动 Apache Web 服务器

Tomcat配置
您需要使用与上面的BalancerMember相同的根 ID 配置 Tomcat 实例。
- 将
jvmRoute参数添加到 Tomcat 的server.xml。这应该添加到引擎名称标签中。
Tomcat实例配置8080端口
Tomcat实例配置8090端口
- 重启Tomcat服务器

确认
在您的应用程序上生成一些负载并检查 Apache 服务器访问日志以确保请求仅路由到一个 Tomcat 实例。
您还会注意到会话 ID 已添加到路由中,如下例所示。
原来的:
127.0.0.1 - - [18/Sep/2013:10:02:02 +0800] "POST /examples/servlets/servlet/RequestParamExample HTTP/1.1" 200 662 "http://localhost/examples/servlets/servlet/RequestParamExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:06 +0800] "GET /examples/servlets/servlet/RequestInfoExample HTTP/1.1" 200 693 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:17 +0800] "GET /examples/servlets/reqinfo.html HTTP/1.1" 200 3607 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:20 +0800] "GET /examples/servlets/servlet/SessionExample HTTP/1.1" 200 1124 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:26 +0800] "POST /examples/servlets/servlet/SessionExample HTTP/1.1" 200 1142 "http://localhost/examples/servlets/servlet/SessionExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:28 +0800] "GET /examples/servlets/servlet/SessionExample?dataname=fda&datavalue=fadaf HTTP/1.1" 200 1159 "http://localhost/examples/servlets/servlet/SessionExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B4EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:32 +0800] "GET /examples/servlets/servlet/SessionExample?dataname=foo&datavalue=bar HTTP/1.1" 200 1174 "http://localhost/examples/servlets/servlet/SessionExample?dataname=fda&datavalue=fadaf" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:36 +0800] "GET /examples/servlets/servlet/RequestHeaderExample HTTP/1.1" 200 1423 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
我希望这可以帮助您使用 Apache Mod Proxy 和 Session Sticky 配置 Tomcat 负载均衡器。
如果您想了解 Tomcat 管理,请查看此在线课程。




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

