当前位置: 首页 > news >正文

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;   # 获取客户端真实 IPproxy_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)

    • 初始化 ServiceEngineHostContext 组件

    • 创建并初始化 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 返回给客户端浏览器

如图所示


文章转载自:

http://Kuj8Qasi.ykcby.cn
http://x1QAEDY4.ykcby.cn
http://O1YlTILq.ykcby.cn
http://0108VsJG.ykcby.cn
http://4rCoFHLp.ykcby.cn
http://ycJiKdwf.ykcby.cn
http://sSwm8dWs.ykcby.cn
http://DJgEjjBb.ykcby.cn
http://ZkfQ485U.ykcby.cn
http://tlk5UFvI.ykcby.cn
http://jfWLZRtF.ykcby.cn
http://xKEQ6pcU.ykcby.cn
http://jsapniWb.ykcby.cn
http://EwoWekN3.ykcby.cn
http://Xbk9klRP.ykcby.cn
http://7vefybC8.ykcby.cn
http://r5vpAaoc.ykcby.cn
http://xHFfqS66.ykcby.cn
http://bstDijNg.ykcby.cn
http://m3yEOo9Z.ykcby.cn
http://VEZcD1KN.ykcby.cn
http://zwbF08Pw.ykcby.cn
http://hKEyvTpu.ykcby.cn
http://uDiIJY8X.ykcby.cn
http://61IHcObf.ykcby.cn
http://Nj8OPdXI.ykcby.cn
http://pEuZL9Bg.ykcby.cn
http://GTgOcq0d.ykcby.cn
http://vDkuyHNN.ykcby.cn
http://ItCQZr09.ykcby.cn
http://www.dtcms.com/a/372850.html

相关文章:

  • 【Linux】匿名管道和进程池
  • PWA:打造媲美 Native Apps 的 Web 应用体验
  • # 小程序 Web 登录流程完整解析
  • 2025中国AI HR市场深度洞察:趋势、厂商与未来展望
  • 并发编程的守护者:信号量与日志策略模式解析
  • Flink Task线程处理模型:Mailbox
  • ActiveMQ classic ,artemis ,artemis console ,nms clients,cms client详解
  • 【论文阅读】Far3D: Expanding the Horizon for Surround-view 3D Object Detection
  • Three.js使用outlinePass描边后,描边颜色和背景叠加变淡
  • GPT系列--类GPT2源码剖析
  • 反编译分析C#闭包
  • DTO与POJO:核心差异与最佳实践
  • #C语言——刷题攻略:牛客编程入门训练(九):攻克 分支控制(三)、循环控制(一),轻松拿捏!
  • Android 中 自定义 RecyclerView 控件限制显示高度
  • Codesy中的UDP发送信息
  • Hadoop进程:深入理解分布式计算引擎的核心机制
  • SQL Server死锁排查实战指南
  • 自学嵌入式第三十八天:数据库
  • 【开题答辩全过程】以 基于springboot的酒店管理系统设计与实现为例,包含答辩的问题和答案
  • SpringBoot控制层接收参数处理、Logback日志入门和使用
  • Python快速入门专业版(十三):Python变量进阶:全局变量与局部变量(含global关键字用法)
  • 深度学习(二):神经元与神经网络
  • 如何在不同 iOS 设备上测试和上架 uni-app 应用 实战全流程解析
  • iOS 开发全流程实战 基于 uni-app 的 iOS 应用开发、打包、测试与上架流程详解
  • [论文阅读] 人工智能 + 软件工程 | 大模型破局跨平台测试!LLMRR让iOS/安卓/鸿蒙脚本无缝迁移
  • 汇编基础1
  • CSS @scope与12个降低css冲突方法
  • pytorch 中是如何实现embeding 的
  • 【.Net技术栈梳理】02-核心框架与运行时(GC管理)
  • 洗完头后根据个人需求选择合适的自然风干 | 电吹风 (在保护发质的同时,也能兼顾到生活的便利和舒适。)