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

Nginx+Tomcat 负载均衡、动静分离

目录

一、Tomcat 和 Nginx

(1)Tomcat 概述

(2)Nginx 概述

(3)应用场景

(4)动静分离原理

(5)nginx负载均衡的原理

(6)nginx动静分离的原理

二、案例

(1)概述

(2)环境部署


一、Tomcat 和 Nginx

(1)Tomcat 概述

  • 定位:Java Servlet 容器( Jakarta EE 实现之一),专注 动态 Java 应用部署(如 Servlet、JSP、Spring Boot 应用)。
  • 核心能力
    • 支持 Java 生态(Spring、Hibernate 等框架无缝集成),作为嵌入式服务器(如 Spring Boot 默认内嵌)。
    • 处理动态请求(数据库交互、业务逻辑计算等),通过多线程模型(BIO/NIO/APR 模式)处理并发。
  • 场景:企业级 Java 系统(金融、后端服务)、微服务架构中的动态服务节点。

(2)Nginx 概述

  • 定位:高性能 HTTP 服务器 + 反向代理 + 负载均衡器,主打 静态资源处理与 高并发流量管理
  • 核心能力
    • 静态资源加速(HTML、CSS、JS、图片等),通过事件驱动(异步非阻塞)模型,支持 10 万 + 并发连接,资源消耗极低。
    • 负载均衡(轮询、权重、IP 哈希等策略)、反向代理(隐藏后端服务 IP,增强安全)、缓存(静态资源缓存、动态内容缓存)。
  • 场景:高并发网站(电商、资讯)、前后端分离架构的前端代理、CDN 边缘节点、微服务网关(服务网关(API 路由)。

(3)应用场景

  • 动静分离架构:Nginx 处理静态资源(直接返回或缓存),Tomcat 处理动态请求(如 /api 接口、JSP 页面),减少 Tomcat 负载,提升整体性能。
  • 负载均衡集群:Nginx 作为前端负载均衡器,将请求分发到多台 Tomcat 服务器(横向扩展),实现 高可用(故障节点自动剔除)。
  • 安全加固:Nginx 作为反向代理,屏蔽 Tomcat 直接暴露(如 Tomcat 的 8080 端口仅内网访问),并通过 Nginx 配置 限流、WAF(Web 应用防火墙) 增强安全。

(4)动静分离原理

  • 分流逻辑
    • 静态资源:Nginx 通过 location 配置匹配文件扩展名(如 *.css*.js*.png),直接从本地文件系统或缓存返回(无需转发到 Tomcat)。
    • 动态请求:Nginx 将 *.jsp/api 等动态路径的请求,通过反向代理(如 proxy_pass)转发到 Tomcat 处理。
  • 优势
    • 静态资源由 Nginx 高速处理(减少 Tomcat 线程占用),动态请求专注业务逻辑,实现 资源分工,提升整体吞吐量。
    • 支持静态资源缓存(proxy_cache),进一步降低后端压力。

(5)nginx负载均衡的原理

  • 策略
    • 轮询(默认):请求按顺序分发到后端 Tomcat 节点,适用于无状态服务。
    • 权重(weight):按节点性能分配请求比例(如高性能服务器权重高)。
    • IP 哈希(ip_hash):同客户端 IP 固定访问同一 Tomcat 节点(解决会话粘性问题)。
  • 实现
    • 配置后端服务列表(upstream 块),Nginx 定期检查节点健康(health_check),自动隔离故障节点,确保流量仅分发到正常节点。
  • 价值:提升系统 扩展性(横向扩展 Tomcat 节点)与 容错性(单个节点故障不影响整体服务)。

(6)nginx动静分离的原理

核心配置示例server {listen 80;server_name example.com;# 静态资源处理(直接返回,无需转发)location ~* \.(css|js|png|jpg|gif)$ {root /path/to/static/files;  # 静态资源目录expires 30d;  # 缓存过期时间}# 动态请求转发到 Tomcat(如 8080 端口)location / {proxy_pass http://tomcat_server:8080;  # Tomcat 集群或单节点proxy_set_header Host $host;  # 保留请求头信息}
}
  • 原理总结:通过 正则匹配 分离动静请求,静态资源由 Nginx 直接响应(利用其静态处理优势),动态请求转发至 Tomcat(专注动态逻辑),实现 I/O 密集型(静态) 与 CPU 密集型(动态) 任务的高效分工。

二、案例

(1)概述

Tomcat 单节点易单点故障、难抗高并发,不适合生产。Nginx 作为 HTTP 服务器,高并发(5 万 +)、静态资源处理强、资源消耗低,常作反向代理和负载均衡器。其处理静态文件(图、HTML、CSS、JS 等),减轻 Tomcat 动态请求压力(Tomcat 动态处理效率弱)。通过 Nginx+Tomcat 架构,Nginx 负责静态资源、负载均衡,Tomcat 专注动态内容,二者互补,提升站点性能与稳定性,解决单 Tomcat 的架构缺陷,适用于生产环境的 Web 站点部署

(2)环境部署

  • Tomcat 部署(两台)
    --关闭防火墙
    systemctl stop firewalld
    setenforce 0--安装JDK和Tomcat
    dnf -y install java
    java -version   #检查
    tar zxvf apache-tomcat-9.0.9.tar.gz  #软件包安装(提前准备)
    mv apache-tomacat-9.0.8 /usr/local/tomcat--启动tomcat
    /usr/local/tomcat/bin/startup.sh
    netstat -anpt | grep java
    tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      2250/java           
    tcp6       0      0 :::8009                 :::*                    LISTEN      2250/java           
    tcp6       0      0 :::8080                 :::*                    LISTEN      2250/java           
    ###解析端口
    8005 端口    接收关闭服务器的命令,只有在服务器启动时才会开放
    8009 端口    AJP端口用于和 Web 服务器进行通信,借助 AJP 协议,能够实现负载均衡或者静态资源的缓存
    8080 端口    ava Web 应用最常用的端口--部署网站
    mkdir -p /web/webapp1
    cd /web/webapp1
    vim index.jsp    #添加
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <html>   
    <head><title>JSP test1 page</title>   </head><body><% out.println("动态页面 1,http://www.test1.com");%></body><body><div>动态页面的图片 1</div><br><img src="logo.png"></body>
    </html>--定义自己的网站目录(在配置文件中添加)
    cd /usr/local/tomcat/conf/server.xml
    <Context docBase="/web/webapp1" path=""></Context>--重启
    /usr/local/tomcat/bin/shutdown.sh 
    /usr/local/tomcat/bin/startup.sh 
  •  nginx部署
    安装nginx--改配置文件(指定代理处理) 用于定义反向代理设置
    upstream my_tomcat {    #上游服务器组server 192.168.10.102:8080 weight=1;server 192.168.10.103:8080 weight=1;
    }
    server {   #服务器配置块location ~ .*\.jsp$ {proxy_set_header HOST $host  #代理请求头中的 “HOST” 字段为客户端请求中的主机名proxy_pass http://my_tomcat;   #匹配的请求转发到“my_tomcat” }location ~ .*\.(png|gif|jpg|jpeg)$ {root /usr/local/nginx/html/img;   #指定图片路径位置expires 30d;         #过期时间,缓存的时间
    }

    关于日志的设置(可选)

    #让后端服务器能通过日志看到真正的访问IP,默认只能看到代理的IP(添加以下内容)
    nginx:
    location ~ .*\.jsp$ {proxy_set_header X-Real-IP $remote_addr;      # 记录客户端真实IP(单级代理)proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 记录完整代理链IPproxy_set_header X-Forwarded-Proto $scheme;   # 传递协议类型(HTTP/HTTPS)
    }
    关键头信息说明:
    X-Real-IP:记录真实客户端 IP(适用于单级代理,如 Nginx 直接代理 Tomcat)。
    X-Forwarded-For:记录代理链中的所有 IP(格式为客户端IP, 代理1IP, 代理2IP,...)。
    X-Proxy-IP:记录当前代理的 IP(即 Nginx 的 IP)。tomcat:
    vim  /usr/local/tomcat/conf/server.xml
    <Connector><Valve className="org.apache.catalina.valves.RemoteIpValve"remoteIpHeader="X-Real-IP"            <!-- 解析X-Real-IP头作为客户端真实IP -->protocolHeader="X-Forwarded-Proto"    <!-- 可选:处理HTTPS协议头 -->internalProxies="127\.0\.0\.1"        <!-- 信任的代理IP(Nginx的IP) -->/>
    <Host>
    <Valve className="org.apache.catalina.valves.AccessLogValve"directory="logs"prefix="localhost_access_log."suffix=".txt"pattern="%a %{X-Real-IP}i %h %l %u %t &quot;%r&quot; %s %b" />
    

相关文章:

  • 【C++项目】负载均衡在线OJ系统-1
  • java后端生成心电图-jfreechart
  • Web后端快速入门(Maven)
  • React前端框架
  • 后端解决跨域问题的三种方案:注解配置 vs 全局配置 vs 过滤器配置(附完整代码详解)
  • 【后端架构师的发展路线】
  • 研发型企业如何面对源代码保密问题
  • 通信算法之281:大疆DJI无人机ID-DJI DroneID开源工程-相关问题-协议信息问题
  • 【Kotlin】高阶函数Lambda内联函数
  • Redis线程模型
  • Gitee Wiki:重塑关键领域软件研发的知识管理范式
  • 时代星光推出战狼W60智能运载无人机,主要性能超市场同类产品一倍!
  • 登录vmware vcenter报vSphere Client service has stopped working错误
  • 最佳实践 | 璞华易研“PLM+AI智能研发平台”,助力汉旸科技实现高新材料“数据驱动研发”
  • 实验设计与分析(第6版,Montgomery著,傅珏生译) 第9章三水平和混合水平析因设计与分式析因设计9.5节思考题9.1 R语言解题
  • 从0开始学习R语言--Day16--倾向得分匹配
  • 实验设计与分析(第6版,Montgomery著,傅珏生译) 第10章拟合回归模型10.9节思考题10.12 R语言解题
  • Vue.js教学第十八章:Vue 与后端交互(二):Axios 拦截器与高级应用
  • TypeScript 高级类型深度指南:从类型体操到实战设计
  • 仓颉项目调试配置与多文件场景下的问题解析
  • 网站做下载文件模块/百度搜索优化软件
  • 受欢迎的网站建设平台/谷歌搜索引擎怎么才能用
  • 广州天河酒店网站建设/找网站公司制作网站
  • 电商网站建设策划方案/西安网站关键词推广
  • 网站图片链接到视频怎么做/搜狗网站排名软件
  • 电商运营和网站运营对比/网店推广的渠道有哪些