注意:本实验基于安装好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的带权重的负载均衡
核心功能
定义负载均衡组 (
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 服务架构! 🚀