目录
简介
一、Tomcat基础部署与配置
1.1 Tomcat应用场景与特性
1.2 环境准备与安装
1.3 Tomcat主配置文件详解
1.4 部署Java Web站点
二、Nginx+Tomcat负载均衡群集搭建
2.1 架构设计与原理
2.2 环境准备
2.3 Tomcat2配置(与Tomcat1对称)
2.4 Nginx安装与配置
三、测试与验证
四、架构总结
4.1 架构优势
4.2 生产环境优化建议
在现代Web应用架构中,如何高效处理日益增长的访问量和复杂的请求类型成为关键挑战。本文将详细介绍如何通过Nginx与Tomcat的组合,构建高性能的负载均衡群集并实现动静资源分离,为Java Web应用提供稳定可靠的生产环境解决方案。
Tomcat作为Apache基金会的开源Web应用服务器,是中小型Java Web项目的首选容器。它轻量级、开源且支持JSP/Servlet规范,但处理静态资源效率较低。典型应用场景中,Tomcat常作为后端动态请求处理器,与前端Nginx/Apache等静态服务器配合使用。
关闭防火墙与SELinux
systemctl stop firewalld # 停止防火墙服务
setenforce 0 # 临时关闭SELinux强制模式
解释:防火墙和SELinux可能阻止服务端口访问,生产环境可通过配置规则替代关闭,但测试环境建议临时关闭以简化流程。
安装JDK(Tomcat运行依赖)
# 检查JDK是否安装
java -version
# 若未安装,使用包管理器安装(以OpenEuler为例)
dnf install -y java-1.8.0-openjdk-devel
解释:JDK包含Java虚拟机(JVM),是运行Tomcat的基础,需确保版本与Tomcat兼容(本文使用1.8版本)。
部署Tomcat
# 解压安装包
tar xf apache-tomcat-9.0.8.tar.gz
# 移动到指定目录并重命名
mv apache-tomcat-9.0.8 /usr/local/tomcat9
# 启动Tomcat
/usr/local/tomcat9/bin/startup.sh
解释:Tomcat采用绿色部署模式,解压即可使用。startup.sh脚本会启动Java进程并监听默认8080端口。
验证启动状态
# 查看8080端口监听
netstat -anpt | grep 8080
# 浏览器访问测试
http://192.168.10.101:8080/
预期结果:出现Tomcat默认欢迎页面,证明服务启动成功。
Tomcat核心配置位于/usr/local/tomcat9/conf/server.xml
,其结构由多层组件构成:
关键组件解释:
Server
:整个Catalina容器的顶层组件,管理服务生命周期Connector
:监听端口的连接器,HTTP连接器默认8080端口,AJP连接器默认8009端口Engine
:处理所有连接器请求的引擎,可配置多个虚拟主机Host
:虚拟主机配置,appBase指定Web应用部署目录Context
:Web应用上下文配置,docBase指定实际文件路径,path为空时为默认应用# 创建网站目录
mkdir -pv /web/webapp1
# 创建测试JSP页面
vim /web/webapp1/index.jsp
index.jsp内容:
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%out.println("动态页面1,http://www.test1.com");%>
静态页面的图片1
修改server.xml配置:
解释:reloadable="true"
表示当类文件变化时自动重新加载,生产环境建议设为false以提升性能。
Nginx+Tomcat组合的核心优势在于:
主机 |
IP地址 |
操作系统 |
应用 |
Tomcat1 |
192.168.10.101 |
OpenEuler24 |
Tomcat 9.0.8 |
Tomcat2 |
192.168.10.102 |
OpenEuler24 |
Tomcat 9.0.8 |
Nginx |
192.168.10.103 |
OpenEuler24 |
Nginx 1.26.3 |
# 修改测试页面内容以区分节点
vim /web/webapp1/index.jsp
Tomcat2的index.jsp:
<%out.println("动态页面2,http://www.test2.com");%>
动态页面的图片2

解释:通过修改输出内容,便于后续测试负载均衡效果时区分不同Tomcat节点。
编译安装Nginx(含必要模块)
# 安装编译依赖
dnf install -y gcc make pcre-devel zlib-devel openssl-devel perl-ExtUtils-MakeMaker
# 创建非特权运行用户
useradd -M -s /sbin/nologin nginx
# 解压安装包
tar zxf nginx-1.26.3.tar.gz
cd nginx-1.26.3
# 配置编译参数
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-pcre
# 编译安装
make && make install
参数解释:
--prefix
:指定安装目录--user/--group
:设置运行用户,提升安全性--with-http_ssl_module
:启用HTTPS支持--with-pcre
:支持正则表达式处理核心配置nginx.conf
http {
# 负载均衡服务器组定义
upstream tomcat_server {
server 192.168.10.101:8080 weight=1;
server 192.168.10.102:8080 weight=1;
}
server {
listen 80;
server_name localhost;
# 动态请求处理(JSP)
location ~ \.jsp$ {
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat_server;
}
# 静态资源处理(图片/样式等)
location ~* \.(gif|jpg|png|bmp|swf|css|js) {
root /usr/local/nginx/html/img;
expires 30d;
}
# 首页默认处理
location / {
root html;
index index.html index.htm;
}
}
}
配置解析:
upstream tomcat_server
:定义名为tomcat_server的服务器组,weight=1表示权重相同,请求均匀分配location ~ \.jsp$
:正则匹配所有JSP请求,通过proxy_pass转发到Tomcat服务器组proxy_set_header
:设置代理请求头,传递客户端真实IP等信息location ~* \.(gif|jpg|png|...)
:匹配静态资源后缀,root指定文件根目录,expires 30d设置缓存30天location /
:处理根路径请求,返回Nginx默认首页准备静态资源并启动Nginx
# 创建静态资源目录
mkdir /usr/local/nginx/html/img
# 复制测试图片
cp /root/logo.jpg /usr/local/nginx/html/img
# 测试配置文件语法
/usr/local/nginx/sbin/nginx -t
# 启动Nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
# 查看服务状态
ps aux | grep nginx
netstat -anpt | grep nginx
3.1 静态页面测试
访问http://192.168.10.103/
,应看到Nginx默认静态页面:
静态页面
这是个静态页面
原理:Nginx直接响应根路径请求,无需经过Tomcat,提升静态资源访问效率。
3.2 负载均衡效果测试
访问http://192.168.10.103/index.jsp
并刷新,页面应在以下内容间交替显示:
关键现象:
3.3 动静分离验证
在JSP页面中,静态图片元素
由Nginx的
/usr/local/nginx/html/img
目录直接提供,而JSP动态内容由Tomcat处理,实现了资源处理的分工优化。
ip_hash
策略Nginx+Tomcat负载均衡与动静分离的这种架构在电商、资讯类网站中广泛应用,能够有效应对日均百万级访问量的挑战。在实际部署时,建议根据业务规模调整服务器配置与优化参数,确保系统始终保持高性能运行状态。