Nginx+Tomcat负载均衡

article/2025/6/6 4:17:16

目录

TomCat基本概念

‌一、核心架构与组件‌

1. ‌模块化架构‌

‌二、核心配置文件‌

1. ‌server.xml‌(主配置文件)

2. ‌关键配置文件‌

‌三、核心处理流程‌

‌四、关键特性详解‌

1. ‌类加载机制‌

2. ‌会话管理‌

3. ‌JSP 处理流程‌

‌五、性能优化指南‌

1. ‌Connector 调优‌

2. ‌JVM 参数优化‌

3. ‌资源泄漏防护‌

‌六、安全管理实践‌

1. ‌安全加固措施‌

2. ‌访问控制配置‌

‌七、部署模式对比‌

‌八、监控与诊断‌

1. ‌内置监控接口‌

2. ‌关键监控指标‌

‌九、版本演进路线‌

‌十、最佳实践总结‌

Nginx+Tomcat负载均衡

‌一、架构原理‌

‌二、核心配置步骤‌

‌1. Nginx配置(nginx.conf)‌

‌2. Tomcat配置‌

‌三、会话保持(Session共享)‌

‌四、部署验证‌

‌五、性能优化建议‌


TomCat基本概念

Tomcat 是 Apache 软件基金会的核心项目,是开源的 Java Servlet 容器和 Web 服务器,支持 Java Servlet、JSP、WebSocket 等核心技术。以下是 Tomcat 的深度解析:


一、核心架构与组件

1. ‌模块化架构
graph TDA[Server] --> B[Service]B --> C[Connector]B --> D[Engine]D --> E[Host]E --> F[Context]F --> G[Wrapper]F --> H[Listener/Filter] 
  • Server‌:顶级容器,代表整个 Tomcat 实例
  • Service‌:服务单元(含 Connector + Engine)
  • Connector‌:网络连接器(HTTP/AJP)
  • Engine‌:请求处理引擎(虚拟主机管理器)
  • Host‌:虚拟主机(域名映射)
  • Context‌:Web 应用上下文(对应 WAR 包)
  • Wrapper‌:Servlet 包装器(管理单个 Servlet)

二、核心配置文件

1. ‌server.xml‌(主配置文件)
<Server port="8005" shutdown="SHUTDOWN"><Service name="Catalina"><!-- HTTP 连接器 --><Connector port="8080" protocol="HTTP/1.1"maxThreads="200" acceptCount="100"/><!-- Engine 容器 --><Engine name="Catalina" defaultHost="localhost"><Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><!-- Context 配置 --><Context path="/myapp" docBase="myapplication" reloadable="true"/></Host></Engine></Service></Server> 
2. ‌关键配置文件
文件作用
web.xml应用级配置(Servlet/Filter 定义)
context.xmlContext 容器配置(数据源等)
catalina.properties全局属性配置
logging.properties日志系统配置

三、核心处理流程

  1. 请求处理链‌:

    sequenceDiagram客户端->>+Connector: HTTP请求Connector->>+Engine: 创建Request/ResponseEngine->>+Host: 匹配虚拟主机Host->>+Context: 定位Web应用Context->>+Wrapper: 查找ServletWrapper-->>-Context: 执行service()Context-->>-Host: 返回响应Host-->>-Engine: 传递结果Engine-->>-Connector: 输出响应Connector-->>-客户端: HTTP响应 
  2. Pipeline-Valve 机制‌:

    • 每个容器都有 Pipeline 和 Valve 链
    • Valve 类似 Filter 链式处理请求
    • BasicValve 最终调用 Servlet 的 service() 方法

四、关键特性详解

1. ‌类加载机制
classDiagramClassLoader <|-- URLClassLoaderURLClassLoader <|-- WebappClassLoaderWebappClassLoader : 应用隔离加载WebappClassLoader : 打破双亲委派(JSP/Servlet) 
  • 隔离加载‌:每个 WebApp 使用独立 ClassLoader
  • 加载优先级‌:
    1. JVM 核心类
    2. $CATALINA_HOME/lib 共享库
    3. WebApp 的 /WEB-INF/lib 和 /WEB-INF/classes
2. ‌会话管理
  • 实现方式‌:
    // 创建会话 
    HttpSession session = request.getSession(true); // 存储数据 
    session.setAttribute("user", userObject); 
  • 持久化方案‌:
    • StandardManager‌:默认(内存存储,重启丢失)
    • PersistentManager‌:文件/数据库存储
    • 集群复制‌:DeltaManager 等
3. ‌JSP 处理流程
.jsp 文件 → Jasper 编译器 → .java 文件 → javac → .class 文件 → Servlet 执行 

五、性能优化指南

1. ‌Connector 调优
<Connectorport="8080"protocol="org.apache.coyote.http11.Http11Nio2Protocol"maxThreads="500"minSpareThreads="20"acceptCount="100"connectionTimeout="20000"maxConnections="1000"/> 
  • 协议选择‌:
    • BIO(阻塞式):已废弃
    • NIO(非阻塞):通用推荐
    • NIO2(AIO):Linux 最佳
    • APR(Native):极致性能
2. ‌JVM 参数优化
# catalina.sh 配置 
export JAVA_OPTS="-server -Xms1024m -Xmx2048m 
-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m 
-XX:+UseG1GC -XX:MaxGCPauseMillis=200" 
3. ‌资源泄漏防护
<!-- context.xml 配置 --> 
<Context><WatchedResource>WEB-INF/web.xml</WatchedResource><Resources cachingAllowed="true" cacheMaxSize="102400"/> 
</Context> 

六、安全管理实践

1. ‌安全加固措施
  • 禁用管理界面(生产环境)
  • 修改 shutdown 端口和指令
  • 文件系统权限隔离
  • 定期升级版本(CVE 修复)
2. ‌访问控制配置
<!-- web.xml 片段 --> 
<security-constraint><web-resource-collection><url-pattern>/admin/*</url-pattern></web-resource-collection><auth-constraint><role-name>admin</role-name></auth-constraint> 
</security-constraint> 

七、部署模式对比

部署方式适用场景特点
独立部署开发/测试环境简单快捷
前端代理生产环境(Nginx+Tomcat)动静分离+负载均衡
嵌入式部署Spring Boot应用无容器依赖
Tomcat集群高并发场景需要Session复制

八、监控与诊断

1. ‌内置监控接口
  • JMX 监控:com.sun.management.jmxremote
  • Probe‌:轻量级监控应用(替代 manager)
2. ‌关键监控指标
指标健康阈值工具
线程池使用率<80%JConsole
Heap 内存使用<70%VisualVM
GC 暂停时间<200msGC log analyzer
请求处理时间P95<500msAccess Log

九、版本演进路线

版本发布时间核心特性
Tomcat 102021Servlet 6.0 / JSP 3.1
Tomcat 92018HTTP/2 / TLS 1.3
Tomcat 82014WebSocket 1.1
Tomcat 72011内存泄漏防护

十、最佳实践总结

  1. 配置规范‌:

    • 生产环境禁用 autoDeploy
    • 设置 reloadable="false"
    • 配置明确的 Context path
  2. 部署建议‌:

    # 标准目录结构 
    webapps/ 
    ├── ROOT/ # 根应用 
    ├── myapp.war # 自动解压部署 
    └── lib/ # 共享库(谨慎使用) 
  3. 故障排查口诀‌:

    • 看日志‌:catalina.out / localhost.log
    • 查线程‌:jstack <pid>
    • 检内存‌:MAT 分析堆转储
    • 测网络‌:TCP 连接状态监控

Nginx+Tomcat负载均衡

一、架构原理

  1. 角色分工

    • Nginx‌:作为反向代理与负载均衡器,接收客户端请求并按算法分发至后端Tomcat服务器。
    • Tomcat‌:作为应用服务器集群,处理动态请求(如JSP)。
    • 动静分离‌:Nginx直接处理静态资源(HTML/图片),动态请求转发至Tomcat,显著提升性能。
  2. 负载均衡策略

    • 轮询(默认)‌:请求按时间顺序依次分发。
    • 加权轮询‌:通过weight参数分配服务器负载比例(示例:server 192.168.1.2:8080 weight=2;)。
    • IP哈希‌:基于客户端IP固定分配服务器,解决Session共享问题,但局域网用户可能失效。

二、核心配置步骤

1. Nginx配置(nginx.conf)
http {# 定义Tomcat服务器组upstream tomcat_cluster {server 192.168.1.2:8080 weight=1; # Tomcat实例1 server 192.168.1.3:8080 weight=1; # Tomcat实例2 
}server {listen 80;location / {proxy_pass http://tomcat_cluster; # 请求转发至集群}# 动静分离:静态资源由Nginx处理location ~ .*\.(html|jpg|js)$ {root /usr/local/nginx/html;}# 动态请求转发至Tomcatlocation ~ .*\.jsp$ {proxy_pass http://tomcat_cluster;}}} 

关键点‌:

  • upstream命名需与proxy_pass一致。
  • 静态资源路径通过root指定。
2. Tomcat配置
  • 多实例部署‌:单机多Tomcat需修改server.xml中的端口(如Shutdown端口、HTTP Connector端口)避免冲突。
  • 应用一致性‌:所有Tomcat节点需部署相同版本的Web应用。

三、会话保持(Session共享)

  1. IP哈希‌:Nginx通过ip_hash算法将同一用户请求固定到同一Tomcat。

    upstream tomcat_cluster {ip_hash;server 192.168.1.2:8080;server 192.168.1.3:8080; 
    } 

    局限‌:服务器宕机导致Session丢失,且不适用于公网IP相同的局域网用户。

  2. Session共享方案

    • Memcached/Redis‌:将Session存储于分布式缓存,Tomcat通过memcached-session-manager等工具读写。
    • 配置示例‌:在Tomcat的context.xml中添加Memcached节点信息。

四、部署验证

  1. 测试负载均衡‌:
    • 多次访问Nginx的IP地址,观察不同Tomcat节点的日志或页面标识(如端口号)。
  2. 动静分离验证‌:
    • 访问静态资源(如http://nginx_ip/img/photo.jpg)应直接由Nginx响应;访问JSP页面则由Tomcat处理。

五、性能优化建议

  • 健康检查‌:通过Nginx的max_failsfail_timeout参数屏蔽故障节点(示例:server 192.168.1.2:8080 max_fails=2 fail_timeout=10s;)。
  • 连接池优化‌:调整Tomcat的maxThreadsacceptCount参数以提升并发能力。
  • 缓存加速‌:Nginx开启gzip压缩静态资源,减少传输量。

附:拓扑示例 

客户端 → Nginx(负载均衡)├→ Tomcat1(动态请求) └→ Tomcat2(动态请求) 静态请求由Nginx直接响应(无需转发)。 

http://www.hkcw.cn/article/oWFBhFXSly.shtml

相关文章

oauth2.0

OAuth 2.0 的工作原理和流程。 OAuth 2.0 是一个授权框架&#xff0c;它允许第三方应用获取对用户资源的有限访问权限&#xff0c;而无需获取用户的密码。以下是详细说明&#xff1a; 1. OAuth 2.0 的四个主要角色 资源所有者&#xff08;Resource Owner&#xff09; 通常是…

笔记本/台式C盘扩容:删除、压缩、跨分区与重分配—「小白教程」

删除C盘右侧分区以扩展 删除分区&#xff0c;也会删除分区中所有资料&#xff0c;请注意备份所有重要资料。 1.WinX选择磁盘管理&#xff0c;右键点击C盘右侧分区&#xff0c;选择删除卷&#xff0c;原分区会变成黑色的“未分配”空间&#xff1b; 2.此时右键C盘选择“扩展卷…

【Bluedroid】蓝牙启动之sdp_init 源码解析

本文围绕Android蓝牙协议栈中 SDP&#xff08;Service Discovery Protocol&#xff0c;服务发现协议&#xff09;模块的初始化函数sdp_init展开&#xff0c;结合核心控制块tSDP_CB及关联数据结构&#xff08;如tL2CAP_CFG_INFO、tCONN_CB等&#xff09;的定义与协作逻辑&#x…

C++学习-入门到精通【13】标准库的容器和迭代器

C学习-入门到精通【13】标准库的容器和迭代器 目录 C学习-入门到精通【13】标准库的容器和迭代器一、标准模板库简介1.容器简介2.STL容器总览3.近容器4.STL容器的通用函数5.首类容器的通用typedef6.对容器元素的要求 二、迭代器简介1.使用istream_iterator输入&#xff0c;使用…

UE5 2D角色PaperZD插件动画状态机学习笔记

UE5 2D角色PaperZD插件动画状态机学习笔记 0.安装PaperZD插件 这是插件下载安装地址 https://www.fab.com/zh-cn/listings/6664e3b5-e376-47aa-a0dd-f7bbbd5b93c0 1.右键创建PaperZD 动画序列 2.添加动画序列 3&#xff0c;右键创建PaperZD AnimBP &#xff08;动画蓝图&am…

你的台式机PCIe插槽到底是几条lane

目录 1.如何查看台式机支持的PCIe插槽的模式 2.查看台式机主板型号 3.主板PCIe插槽配置确认 4.实际模式与理论模式不匹配原因 5.解决方案 在【PCIe XDMA开发】XDMA与MIG位宽一致性要求一文中&#xff0c;我们讨论了PCIe带宽计算过程。那么实际带宽与理论计算带宽是否能够一致或…

微软PowerBI考试 PL300-Power BI 入门

Power BI 入门 上篇更新了微软PowerBI考试 PL-300学习指南&#xff0c;今天分享PowerBI入门学习内容。 简介 Microsoft Power BI 是一个完整的报表解决方案&#xff0c;通过开发工具和联机平台提供数据准备、数据可视化、分发和管理。 Power BI 可以从使用单个数据源的简单…

【论文阅读】Dolphin: Document Image Parsing via Heterogeneous Anchor Prompting

Paper&#xff1a;https://arxiv.org/abs/2505.14059 Source code: https://github.com/bytedance/Dolphin 作者机构&#xff1a;字节跳动 背景 业务场景 企业数据大多数都以文本、图片、扫描件、电子表格、在线文档、邮件等文档的形式存在&#xff0c;例如&#xff1a;PDF文…

WPS 利用 宏 脚本拆分 Excel 多行文本到多行

文章目录 WPS 利用 宏 脚本拆分 Excel 多行文本到多行效果需求背景&#x1f6e0; 操作步骤代码实现代码详解使用场景注意事项总结 WPS 利用 宏 脚本拆分 Excel 多行文本到多行 在 Excel 工作表中&#xff0c;我们经常遇到一列中包含多行文本&#xff08;用换行符分隔&#xff…

STM32外部中断(EXTI)以及旋转编码器的简介

一、外部中断机制概述 中断是指当主程序执行期间出现特定触发条件&#xff08;即中断源&#xff09;时&#xff0c;CPU将暂停当前任务&#xff0c;转而执行相应的中断服务程序&#xff08;ISR&#xff09;&#xff0c;待处理完成后恢复原程序的运行流程。该机制通过事件驱动…

【Unity开发】控制手机移动端的震动

&#x1f43e; 个人主页 &#x1f43e; 阿松爱睡觉&#xff0c;横竖醒不来 &#x1f3c5;你可以不屠龙&#xff0c;但不能不磨剑&#x1f5e1; 目录 一、前言二、Unity的Handheld.Vibrate()三、调用Android原生代码四、NiceVibrations插件五、DeviceVibration插件六、控制游戏手…

ES101系列07 | 分布式系统和分页

本篇文章主要讲解 ElasticSearch 中分布式系统的概念&#xff0c;包括节点、分片和并发控制等&#xff0c;同时还会提到分页遍历和深度遍历问题的解决方案。 节点 节点是一个 ElasticSearch 示例 其本质就是一个 Java 进程一个机器上可以运行多个示例但生产环境推荐只运行一个…

RabbitMQ在SpringBoot中的应用

1.简单模式 P:生产者,要发送消息的程序. C:消费者,消息的接收者. Queue:消息队列,类似于一个邮箱,生产者向其中投递消息,消费者从其中取出消息. 特点:一个生产者P,一个消费者C,消息只能被消费一次,也成为点对点模式. 适用场景:消息只能被单个消费者处理. 设置队列的名称为…

基于python写的目录/文件递归检索工具

核心功能 1. 目录结构检索 递归扫描 &#xff1a;深度遍历指定目录及其所有子目录 多种检索模式 &#xff1a; 仅文件夹模式&#xff1a;只显示目录结构仅文件模式&#xff1a;只显示文件列表文件文件夹模式&#xff1a;完整显示目录树结构&#xff08;默认模式&#xff09; …

Qwen3高效微调

高效微调 场景、模型、数据、算力 高效微调的应用场景 对话风格微调&#xff1a;高效微调可以用于根据特定需求调整模型的对话风格。例如&#xff0c;针对客服系统、虚拟助理等场景&#xff0c;模型可以通过微调来适应不同的 语气、礼貌程度 或 回答方式&#xff0c;从而在与…

不动产登记区块链系统(Vue3 + Go + Gin + Hyperledger Fabric)

好久没有介绍过新项目的制作了&#xff0c;之前做的一直都是Fisco Bcos的项目&#xff0c;没有介绍过Hyperledger Fabric的项目&#xff0c;这次来给大家分享下。 系统概述 不动产登记与交易平台是一个基于Hyperledger Fabric的综合性管理系统&#xff0c;旨在实现不动产登记…

深度学习学习率调度器指南:PyTorch 四大 scheduler 对决

在深度学习模型训练中&#xff0c;学习率调度器&#xff08;Learning Rate Scheduler&#xff09;是影响模型收敛效果和训练稳定性的关键因素。选择合适的学习率调度策略&#xff0c;往往能让模型性能产生质的飞跃。本文将深入对比PyTorch中最常用的四种学习率调度器&#xff0…

ERP学习-AP

业务需要。持续更新学习进度 借助网上零搭建平台上手实操 这个是简道云平台页面链接&#xff0c;登录的化去手机号登录 目前开始对应付模块进行学习

基于 ZYNQ UltraScale+ OV5640的高速图像传输系统设计,支持国产替代

引 言 随着电子信息技术的不断进步&#xff0c;人工智能、医 疗器械、机器视觉等领域都在高速发展 [1] &#xff0c;工业相机 是机器视觉系统中的一部分 [2] &#xff0c;对工业相机而言&#xff0c;传 输图像的速率、传输过程的抗干扰能力是其关键&#xff0c; 工业相…

smartGit 试用突破30天

1 下载 选择19.1版本 2 运行 我是linux环境 解压后, cd bin ./smartgit.sh 选择使用30天. 然后退出 3 绿色软件 破解步骤 下载破解文件&#xff1a;访问 Gitee 链接 goto下载下载破解文件 解压文件&#xff1a;下载后解压得到 crackSmartGit.jar 和 license.zip 用编辑…