Nginx 反向代理 + Tomcat 集群:负载均衡配置步骤与核心原理

1.反向代理

1.1 原理

  • 用户请求先到 Nginx,再由 Nginx 把请求转发给后端的应用服务器(比如 Tomcat、Node.js、Spring Boot)。

    后端 php python java(我们使用时java后端 tomcat 微服务 ) 后端专业语言 应用服务器/业务服务器

  • Nginx 在这里就像"中转站",客户端只知道自己连的是 Nginx,不知道真正提供服务的是哪台后端。

流程如图所示

1.2 实验配置

编辑 nginx.conf,在 server 块里添加:

复制代码
server {
    listen 80;
    server_name localhost;
​
    location / {
        proxy_pass http://127.0.0.1:8080;   # 把请求转发到后端 8080 端口       反向代理
        proxy_set_header Host $host;        # 保留原始的 Host 头
        proxy_set_header X-Real-IP $remote_addr;   # 获取客户端真实 IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

保存配置后,执行:

复制代码
nginx -s reload

现在访问 http://localhost/,实际会由 Nginx 转发到 http://127.0.0.1:8080/。

2.负载均衡

Nginx 的负载均衡是它最常用的功能之一,可以将客户端请求分发到多台后端服务器,提高系统的并发能力、可用性和稳定性。

2.1 基本原理

Nginx 作为反向代理服务器,接收来自客户端的请求,然后根据配置的负载均衡策略,将请求转发到后端的多个应用服务器(upstream server)。

好处:

  • 提高性能:分担单台服务器压力

  • 高可用性:某台服务器宕机,Nginx 自动转发到其他正常的节点

  • 可扩展性:轻松添加或移除后端节点

如图所示

2.2 常见负载均衡策略

轮询(Round Robin)

最少连接数(Least Connections)

IP 哈希(IP Hash)

加权轮询(Weighted Round Robin)

最少时间算法(Least Time)

3.后端 tomcat

3.1 Tomcat 的本质

Tomcat 本质上是一个 Servlet 容器,也可以称作一个轻量级 Web 应用服务器(Web Server + Servlet Container)。 它的主要职责是:

  • 接收 HTTP 请求(内置了一个简单的 HTTP 服务器)

  • 将请求分发给对应的 Web 应用(基于 URL 映射)

  • 执行 Servlet / JSP 并生成响应

  • 返回 HTTP 响应给客户端

换句话说,Tomcat 是一个 Java Web 应用运行环境,可以托管基于 Servlet、JSP、Spring MVC、Spring Boot(war 部署)等的应用。

3.2 运行原理

Tomcat 的核心工作流程可简化为以下几个步骤:

  1. 启动

    • 加载 server.xml 配置,启动各个 Connector(监听端口,如 8080)

    • 初始化 Service、Engine、Host、Context 组件

    • 创建并初始化 Servlet 容器

  2. 接收请求

    • Connector 监听 HTTP 请求(基于 NIO/线程池)

    • 请求被封装为 Request 对象

  3. 请求分发

    • Mapper 根据 URL → 找到对应的 Context(即某个 Web 应用)

    • 找到对应的 Wrapper(某个 Servlet)

  4. 执行 Servlet

    • Tomcat 调用 Servlet 的 service() 方法

    • Servlet 处理请求,可能访问数据库或调用其他 API

    • 返回 Response 对象

  5. 响应客户端

    • Tomcat 将 Response 转换为 HTTP 响应报文

    • 通过 Socket 返回给客户端浏览器

如图所示

相关推荐
光依旧14 小时前
发版就掉请求?Spring Boot优雅停机的四步
运维·spring boot·nginx·高可用·优雅停机·mcp server
高级程序源20 小时前
springboot校园外卖平台13676-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·tomcat·maven·课程设计
骑着蜗牛撵大象3271 天前
服务下线不再炸:分层关闭、TCP 存活探测与负载均衡排水的落地套路
android·tcp/ip·负载均衡·tcp·高可用·健康检查·优雅关闭
VX_bysjlw9852 天前
数码设备销售网站设计与实现39138-计算机毕设原创(免费领源码+带部署教程)
java·vue.js·spring boot·mysql·tomcat·mybatis·idea
Lvan的前端笔记2 天前
docker:每个前端项目一个 Nginx 容器还是只有一个Nginx容器
前端·nginx·docker
姜鱼问生2 天前
Nginx 缓存命中率监控:从 X-Cache-Status 到实时统计
运维·nginx·缓存
Joy T3 天前
从 Nginx 到 Gateway 再到微服务:一次 AI 请求的完整链路
nginx·微服务·gateway·controller·路由转发·ai service·接口错误排查
小匠石钧知3 天前
07_在k8s集群中安装ingress-nginx
nginx·容器·kubernetes·ingress
螺蛳粉 螺蛳粉3 天前
第五篇:Keepalived + LVS 四层负载均衡高可用实战:DR 模式全流程
运维·负载均衡·lvs·keepalived·高可用
百度一下吧3 天前
Nginx 使用手册:从安装配置到实战部署
运维·nginx