在Linux环境下使用Nginx作为负载均衡器分发请求到多个Tomcat服务器,主要涉及以下步骤:
编辑Nginx配置文件(通常位于/etc/nginx/nginx.conf
或/etc/nginx/conf.d/default.conf
):
http {
upstream tomcat_cluster {
# 配置负载均衡策略
# least_conn; # 最少连接策略
# ip_hash; # IP哈希策略(会话保持)
# 配置Tomcat服务器节点
server 127.0.0.1:8080 weight=3; # weight表示权重
server 127.0.0.1:8081 weight=2;
server 127.0.0.1:8082 weight=1;
# 可选的健康检查参数
# max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://tomcat_cluster;
# 以下为常用代理设置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 连接超时设置
proxy_connect_timeout 5s;
proxy_send_timeout 10s;
proxy_read_timeout 10s;
}
}
}
在每个Tomcat实例的server.xml
中,确保配置了正确的端口号(避免冲突):
<!-- 第一个Tomcat实例 -->
<Connector port="8080" protocol="HTTP/1.1" ... />
<!-- 第二个Tomcat实例 -->
<Connector port="8081" protocol="HTTP/1.1" ... />
如果需要会话保持,可选择以下方案之一:
upstream tomcat_cluster {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
配置Tomcat的server.xml
启用集群功能:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
upstream tomcat_cluster {
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8081 max_fails=3 fail_timeout=30s;
# 被动健康检查
# max_fails - 失败次数阈值
# fail_timeout - 超时时间
}
sudo systemctl restart nginx
访问Nginx服务器IP或域名,观察请求是否被分配到不同Tomcat实例
检查Nginx日志:
tail -f /var/log/nginx/access.log
least_conn
指令ip_hash
指令(会话保持)server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://tomcat_cluster;
# ...其他代理设置
}
}
502 Bad Gateway错误
会话不保持
性能问题
通过以上配置,您可以在Linux环境下实现Nginx对多个Tomcat实例的负载均衡。根据实际需求调整权重、健康检查参数和会话保持策略。