注意:本实验基于安装好nginx和tomcat11和tomcat9
没安装的可以参考本人博客
Nginx源码安装+静态站点部署指南(CentOS 7)-CSDN博客
同时部署两个不同版本的tomcat要如何配置环境变量-CSDN博客
实验目标
-
掌握 Nginx静态资源托管(端口10010)。
-
实现 Nginx反向代理 ,通过域名
www.123.com
分发请求到不同Tomcat实例。 -
理解 路径匹配规则 (
/tomcat1/
vs/tomcat2/
)。
实验环境
-
服务器 :CentOS 7(IP:
10.1.1.160
) -
软件:
-
Nginx 1.20
-
Tomcat9(端口8888) + Tomcat11(端口8080)
-
准备工作
1.找到主机的host文件,并添加配置如下
10.1.1.160 www.123.com


2.测试添加的ip是否可以解析域名
在本地终端上ping www.123.com

3.在浏览器输入设置好的www.123.com,出现以下界面

Tomcat操作
两个tomcat除了版本,关闭端口,访问端口还有提示语不一样,其他都不需要修改
tomcat11
关闭端口:8005 访问端口:8080 提示语:Tomcat -1
tomcat9
关闭端口:8006 访问端口:8888 提示语:Tomcat -2
以tomcat2举例(注意自己安装tomcat的目录)
1.修改提示语
区分两个tomcat,下面的 Tomcat -2 是指tomcat9版本
cd /opt/module/tomcat9/webapps/ROOT/
vim index.jsp


2.修改tomcat9的端口

关闭端口:

访问端口:

3.重启tomcat

4.查看tomcat状态

5.验证是否修改成功
浏览器输入10.1.1.160:8080

Nginx操作
实例一 :进行域名解析后端口 10010 的静态服务
vim /usr/local/nginx/conf/nginx.conf
server {
listen 10010;
location / {
root html/hello;
index hello.html;
}
}
-
作用:
-
监听 10010 端口,提供静态文件服务。
-
访问
http://服务器IP:10010/
时:-
返回
html/hello/hello.html
文件。 -
如果
hello.html
不存在,Nginx 会报 403 或 404 错误。
-
-
-
典型用途:测试或内部工具页面。




实例二:域名 www.123.com
的反向代理
修改配置文件,添加下面的server块
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.123.com;
location / {
proxy_pass http://10.1.1.160:8080;
index index.jsp;
}
}
-
作用:
-
监听 80 端口 ,仅对域名
www.123.com
生效。 -
将所有请求转发到
http://10.1.1.160:8080
(如 Tomcat 服务)。 -
index index.jsp
:指定默认索引文件(但对动态代理通常无效,可删除)。
-
-
关键点:
-
需确保
10.1.1.160:8080
服务正常运行。 -
浏览器访问
http://www.123.com
实际显示的是后端 8080 端口的内容。
-
-
问题 :缺少代理头设置(如
Host
头),可能导致后端服务无法获取真实客户端 IP。 -

实例三:通过路径前缀将请求分发到不同的后端 Tomcat 服务
1.准备两个tomcat的测试html脚本
mkdir -p /opt/tomcat11/webapps/tomcat1/
vim /opt/tomcat11/webapps/tomcat1/index.html
<!DOCTYPE html>
<html>
<head>
<title>Tomcat1 Test</title>
</head>
<body>
<h1>Tomcat1 is Working!</h1>
<p>This page is served from Tomcat1 (8080 port)</p>
</body>
</html>

mkdir -p /opt/module/tomcat9/webapps/tomcat2/
vim /opt/module/tomcat9/webapps/tomcat2/index.html
<!DOCTYPE html>
<html>
<head>
<title>Tomcat2 Test</title>
</head>
<body>
<h1>Tomcat2 is Working!</h1>
<p>This page is served from Tomcat2 (8888 port)</p>
</body>
</html>

2.打开nginx配置文件,修改Tomcat 服务如下
vim /usr/local/nginx/conf/nginx.conf
server {
listen 10011;
server_name www.123.com;
location /tomcat1/ {
proxy_pass http://10.1.1.160:8080;
index index.html index.jsp;
}
location /tomcat2/ {
proxy_pass http://10.1.1.160:8888;
index index.html index.jsp;
}
}
1. 核心作用
-
监听
www.123.com
域名的 10011端口。 -
根据请求的 URL 路径前缀,将流量转发到两个不同的 Tomcat 服务:
-
路径以
/tomcat1/
开头的请求 → 转发到http://10.1.1.160:8080
-
路径以
/tomcat2/
开头的请求 → 转发到http://10.1.1.160:8888
-
2. 实际访问示例
用户请求的 URL | 实际代理的后端地址 |
---|---|
http://www.123.com:10011/tomcat1/api |
http://10.1.1.160:8080/api |
http://www.123.com:10011/tomcat2/login |
http://10.1.1.160:8888/login |

3.网页测试访问
Tomcat1的访问页面
http://10.1.1.160:10011/tomcat1/

http://www.123.com:10011/tomcat1/

Tomcat2的网页访问:
http://10.1.1.160:10011/tomcat2/

http://www.123.com:10011/tomcat2/

如果访问页面有乱码
(1) 修改 JSP/HTML 文件
在文件头部强制声明 UTF-8 编码:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- 如果是 HTML -->
(2) 修改 Tomcat 的 server.xml
确保 Connector 配置了 URIEncoding="UTF-8"
:
vi /opt/module/tomcat9/conf/server.xml
找到 8888 端口的 Connector,添加 URIEncoding
:
xml
<Connector
port="8888"
protocol="HTTP/1.1"
URIEncoding="UTF-8" <!-- 关键参数 -->
connectionTimeout="20000"
redirectPort="8443"
/>

通过本次配置,您成功实现了以下功能:
-
域名解析与静态服务
-
通过修改本地
hosts
文件,将www.123.com
解析到服务器 IP(10.1.1.160
)。 -
配置 Nginx 监听 10010 端口 ,提供静态 HTML 服务(
/usr/local/nginx/html/hello/hello.html
)。
-
-
Tomcat 多实例管理
-
部署 Tomcat11(8080 端口) 和 Tomcat9(8888 端口),并修改默认提示语以区分服务。
-
为每个 Tomcat 创建测试页面(
tomcat1/index.html
和tomcat2/index.html
),验证服务可用性。
-
-
Nginx 反向代理与路径分发
-
通过
www.123.com
的 10011端口 代理到不同 Tomcat 服务:-
/tomcat1/
→ 转发到Tomcat11(8080 端口)
-
/tomcat2/
→ 转发到Tomcat9(8888 端口)
-
-
支持动态内容(JSP)和静态内容(HTML)的代理转发。
-
-
编码问题修复
- 通过调整 Tomcat 的
server.xml
(URIEncoding="UTF-8"
)和 HTML 文件的元标签,解决中文乱码问题。
- 通过调整 Tomcat 的
实例四:tomcat的带权重的负载均衡
核心功能
-
定义负载均衡组 (
upstream
)nginx
upstream tomcat-server { server 10.1.1.160:8080 weight=1; # Tomcat11 server 10.1.1.160:8888 weight=3; # Tomcat9 }
-
将两个Tomcat实例组成集群
-
权重分配:
-
10.1.1.160:8888
(Tomcat9)接收 75% 的请求(权重3/(1+3)) -
10.1.1.160:8080
(Tomcat11)接收 25% 的请求
-
-
-
创建负载均衡入口 (
server
)nginx
server { listen 10013; location / { proxy_pass http://tomcat-server; # 指向upstream组 } }
-
监听10013端口,将所有请求转发到
tomcat-server
集群 -
自动按权重轮询分发请求
-

最终效果
-
访问
http://www.123.com:10010/
→ 返回 Nginx 静态页面(hello.html
)。 -
访问
http://www.123.com:10011/tomcat1/
→ 显示Tomcat11
的服务页面(8080 端口)。 -
访问
http://www.123.com:10011/tomcat2/
→ 显示Tomcat9
的服务页面(8888 端口)。 -
访问
http://www.123.com:10013/
→ 每显示 三次Tomcat9
的服务页面再显示一次Tomcat11的服务页面
技术价值
-
灵活路由:通过 Nginx 的路径匹配,实现同一域名下多后端服务的无缝切换。
-
资源隔离:Tomcat 多实例独立运行,避免端口冲突,便于版本管理和灰度发布。
-
高效代理:Nginx 作为反向代理,提升请求处理效率,并隐藏后端服务器细节。
至此,您已构建了一个支持 静态服务 + 动态代理 + 多实例分发+权重负载均衡 的完整 Web 服务架构! 🚀