关于 Tomcat 系列其他文章的传送门

一、使用 Nginx 和 Apache 反向代理 Tomcat¶
在生产环境中,Tomcat 不应该直接对客户端开放访问,而应该使用 Apache 或 Nginx 来反向代理客户端的请求。
Tomcat 支持使用 http 和 ajp 两种连接协议,Apache 两种都支持,而 Nginx 目前只能使用 http 协议。
1. 使用 Nginx 反代示例¶

使用 Nginx 作为反代可以组成 LNMT,即 Linux、Nginx、MySQL、Tomcat。
请求报文走向:
Client (http)->nginx (reverse proxy)(http)->tomcat (http connector)
Nginx 中反代的配置示例¶
1 | location / { |
2. 使用 Apache 反代¶
使用 Nginx 作为反代可以组成 LAMT,即 Linux、Apache(httpd)、MySQL、Tomcat。
httpd 支持使用两种协议代理 Tomcat,对应使用的代理模块为:
- proxy_module
- proxy_http_module:适配 http 协议;
- proxy_ajp_module:适配 ajp 协议;
请求报文走向:
Client (http)->httpd (proxy_http_module)(http)->tomcat (http connector)Client (http)->httpd (proxy_ajp_module)(ajp)->tomcat (ajp connector)Client (http)->httpd (mod_jk)(ajp)->tomcat (ajp connector)
使用 http 协议代理配置示例¶
使用 proxy_http_module 模块。
1 | <VirtualHost *:80> |
使用 ajp 协议代理配置示例¶
使用 proxy_ajp_module 模块。
只需要将 http:// 换成 ajp:// 即可。
1 | <VirtualHost *:80> |
二、使用 Nginx 和 Apache 负载均衡 Tomcat¶
1. 环境准备¶
使用 Docker 容器模拟两个 Tomcat 后端:
- 网站目录为:
/myapp/; - IP 为:
10.0.0.2:808010.0.0.3:8080
1 | docker run --name tc1 --hostname tc1.monster.com \ |
创建 tc1 的测试页:
在 tc1 提供如下示例页面,演示效果会显示 TomcatA。
1 | <%@ page language="java" %> |
创建 tc2 的测试页:
在 tc1 提供如下示例页面,演示效果会显示 TomcatB。
1 | <%@ page language="java" %> |
实验环境就准备好了,下面开始实验
2. 使用 Nginx 负载均衡 Tomcat¶
Nginx 配置文件示例:
1 | http { |
访问 Nginx 的监听地址 http://192.168.50.11/myapp/,可以看出轮询效果。
1 | # while true ; do curl -s 192.168.50.11/myapp/ | grep head; sleep .1 ; done |
3. 使用 Apache 负载均衡 Tomcat¶
负载均衡调度算法:
Apache 的负载均衡必须由 proxy_balancer_module 模块来实现。
使用 httpd -M 查看模块,支持 3 种负载均衡:
lbmethod_bybusyness_module:等同于 wlc;lbmethod_byrequests_module:等同于 wrr;lbmethod_bytraffic_module:根据与后端 Server 的链接的繁忙程度调度;
还有一个 lbmethod_heartbeat_module 模块,主要是检测后端 Server 心跳,一般用做健康状态检测。
使用 lbmethod 参数,当所有后端的调度算法一致时,可以统一配置。
- 如:
ProxySet lbmethod=byrequests # 定义调度算法为 wrr
httpd.conf 配置文件示例,使用 http 协议代理 Tomcat。
1 | <proxy balancer://tomcat> # 定义组名 |
如果需要 使用 ajp 协议代理 Tomcat,只需要将上述配置中的 http 协议改为 ajp 即可。
访问 Apache 的监听地址 http://192.168.50.11/myapp/,可以看出轮询效果。
1 | # while true ; do curl -s 192.168.50.11/myapp/ | grep head; sleep .1 ; done |
BalancerMember 参数¶
BalancerMember 其实有许多参数可用。
语法:BalancerMember [balancerurl] url [key=value [key=value ...]]
key 可用的参数:
- status:定义此后端的状态,如
status=D。D:定义为 disabled;S:定义为 stopped;I:定义为强制使用此后端,忽略一切错误;H:定义为 Sorry Server;E:强制为错误状态;N:定义为排干模式。
- loadfactor:负载因子,即权重;
启用管理接口¶
Aoache 也有可以管理后端 Server 的管理接口,添加如下配置即可激活。
1 | <Location /balancer-manager> |
