《Nginx + 双Tomcat实战:域名解析、静态服务与反向代理、负载均衡全指南》

注意:本实验基于安装好nginx和tomcat11和tomcat9

没安装的可以参考本人博客

Nginx源码安装+静态站点部署指南(CentOS 7)-CSDN博客

同时部署两个不同版本的tomcat要如何配置环境变量-CSDN博客

保姆级tomcat的页面部署(静态)-CSDN博客

实验目标

  1. 掌握 Nginx静态资源托管(端口10010)。

  2. 实现 Nginx反向代理 ,通过域名 www.123.com 分发请求到不同Tomcat实例。

  3. 理解 路径匹配规则/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" 
/>

通过本次配置,您成功实现了以下功能:

  1. 域名解析与静态服务

    • 通过修改本地 hosts 文件,将 www.123.com 解析到服务器 IP(10.1.1.160)。

    • 配置 Nginx 监听 10010 端口 ,提供静态 HTML 服务(/usr/local/nginx/html/hello/hello.html)。

  2. Tomcat 多实例管理

    • 部署 Tomcat11(8080 端口)Tomcat9(8888 端口),并修改默认提示语以区分服务。

    • 为每个 Tomcat 创建测试页面(tomcat1/index.htmltomcat2/index.html),验证服务可用性。

  3. Nginx 反向代理与路径分发

    • 通过 www.123.com 的 10011端口 代理到不同 Tomcat 服务:

      • /tomcat1/ → 转发到 Tomcat11(8080 端口)

      • /tomcat2/ → 转发到 Tomcat9(8888 端口)

    • 支持动态内容(JSP)和静态内容(HTML)的代理转发。

  4. 编码问题修复

    • 通过调整 Tomcat 的 server.xmlURIEncoding="UTF-8")和 HTML 文件的元标签,解决中文乱码问题。

实例四:tomcat的带权重的负载均衡

核心功能

  1. 定义负载均衡组 (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% 的请求

  2. 创建负载均衡入口 (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 服务架构! 🚀

相关推荐
wanhengidc15 分钟前
服务器机柜与网络机柜各自的优势
服务器·网络·智能路由器
麦兜*36 分钟前
Spring Boot 集成Reactive Web 性能优化全栈技术方案,包含底层原理、压测方法论、参数调优
java·前端·spring boot·spring·spring cloud·性能优化·maven
天上掉下来个程小白39 分钟前
MybatisPlus-06.核心功能-自定义SQL
java·spring boot·后端·sql·微服务·mybatisplus
网易独家音乐人Mike Zhou40 分钟前
【Linux应用】开发板USB共享网络,网线或USB以太网共享网络(局域网连接PC和开发板,实现PC给开发板共享网络,USB通过NDIS驱动共享)
linux·网络·单片机·mcu·物联网·嵌入式·iot
知了一笑1 小时前
独立开发第二周:构建、执行、规划
java·前端·后端
basketball6161 小时前
Linux C 管道文件操作
linux·运维·c语言
UI前端开发工作室1 小时前
数字孪生技术为UI前端提供新视角:产品性能的实时模拟与预测
大数据·前端
Sapphire~1 小时前
重学前端004 --- html 表单
前端·html
今天背单词了吗9801 小时前
算法学习笔记:17.蒙特卡洛算法 ——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·笔记·考研·算法·蒙特卡洛算法
Dcs2 小时前
从 C 到 Rust:一位开发者的 `tmux` 全面移植之旅
java