【Nginx反向代理与负载均衡实战指南】
文章目录
反向代理
反向代理是Nginx的核心功能之一,其工作原理如下:
用户请求首先到达 Nginx 服务器
Nginx根据配置将请求转发给后端应用服务器/业务服务器(如Tomcat、Node.js、Spring Boot等)
后端:php python java(java后端 、tomcat 、微服务)
Nginx 在这一过程中充当“中转站”的角色,客户端并不知道真正提供服务的后端服务器是哪一台,从而实现了请求的转发与隐藏后端服务器的作用
基本流程如下:

实验配置示例:
要配置 Nginx 作为反向代理,需编辑 nginx.conf 文件,在 server 块中添加如下配置:

保存配置后,执行以下命令重新加载 Nginx:
此时访问 http://localhost/,实际请求将由 Nginx 转发至 http://127.0.0.1:8080/
负载均衡
负载均衡基本原理
负载均衡(Load Balancing)是 Nginx 的核心功能之一,通过将客户端请求分发到多台后端服务器,显著提升系统的并发处理能力、可用性和稳定性。
主要优势包括:
提升性能:分散单台服务器压力;
高可用性:某台服务器故障时,自动将请求转发至其他正常节点;
良好的扩展性:可灵活增删后端服务器节点

常见负载均衡策略
Nginx 支持多种负载均衡算法,可根据实际业务场景选择合适的策略
轮询 (Round Robin)(最常用)
轮询算法是 Nginx 的默认分流算法。它按顺序将请求依次分配给每一台后端服务器,直到最后一台服务器,然后重新从第一台服务器开始。这种方法简单且均匀地分配了流量。
数据流向:每个请求依次被分配到下一个服务器。假设有三台服务器(Server A、Server B、Server C),第一个请求被分配到 Server A,第二个请求分配到 Server B,第三个请求分配到 Server C,第四个请求又回到 Server A,依此类推。
特点:
Nginx默认的负载均衡算法
请求按顺序均匀分配到每台后端服务器,无视服务器的当前负载和响应时间
简单高效,适合服务器性能相近的场景
配置示例:

最少连接数:
最少连接数算法将请求分配给当前活动连接数最少的服务器。这种算法适用于请求处理时间不均匀的情况,可以有效平衡服务器的负载。
数据流向:每个请求被分配到当前连接数最少的服务器。例如,Server A 有 2 个连接,Server B 有 5 个连接,新的请求会被分配到 Server A。
特点:
将请求分配给当前活动连接数最少的服务器
动态均衡负载,适用于请求处理时间不一的场景
有效避免服务器过载
配置示例:
哈希:
IP 哈希算法通过计算客户端 IP 地址的哈希值,将请求始终分配给同一台服务器。适用于需要将特定客户端的请求固定在同一台服务器上的场景。
数据流向:每个客户端的 IP 地址被哈希计算,然后根据哈希值将请求固定分配到某一台服务器。假设客户端 X 的哈希值指向 Server A,客户端 Y 的哈希值指向 Server B,则无论多少次请求,X 的请求总是流向 Server A,Y 的请求总是流向 Server B
特点:
基于客户端IP地址计算哈希值
同一个客户端总是被分配到同一台服务器,有助于会话保持
配置示例:
加权轮询:
加权轮询算法允许为每台服务器设置权重,权重越大的服务器将会获得更多的请求。适用于服务器性能不均衡的情况。
数据流向:根据服务器设置的权重值分配请求。假设 Server A 权重为 3,Server B 权重为 1,则 4 个请求中,3 个会被分配到 Server A,1 个会被分配到 Server B。
特点:
允许为每台服务器设置权重值
权重越高的服务器获得更多请求
适合服务器性能不均衡的环境
配置示例:

最少时间算法:
最少时间算法基于请求的响应时间,将请求分配给响应时间最短的服务器。这种算法在 Nginx 1.15.3 及以后版本中可用,适用于需要最大化响应速度的场景。
数据流向:每个请求分配到响应时间最短或平均连接时间最短的服务器。假设 Server A 的响应时间较快,Server B 较慢,则新的请求更可能流向 Server A。
特点:基于服务器响应时间进行智能分配
将请求分配给响应时间最短的服务器,适用于对响应速度要求较高的场景
Nginx 1.15.3及以上版本支持
进一步优化了最少连接算法,适用于高负载环境下的动态负载均衡
配置示例:
一致性哈希:
一致性哈希将服务器和请求的键(如URL)映射到一个哈希环上,当集群中某台服务器故障时,只有部分请求会重新分配到其他服务器,而不是全部重新分配(IP哈希会全部分配,因为它是计算出哈希值后取余)。这在缓存等场景中非常有用。
数据流向:根据请求的某个特定参数(如 URL、Cookie 或其他 Header),进行哈希计算,将请求分配到哈希值对应的服务器。假设 Server A 和 Server B,参数 “foo” 的哈希值指向 Server A,参数 “bar” 的哈希值指向 Server B,则 “foo” 请求总是流向 Server A,“bar” 请求总是流向 Server B。
特点:
基于特定参数(如URL)计算哈希值,服务器节点变动时仅影响部分请求
适应服务器节点变动,减少请求的重新分配,适合缓存敏感的场景
需要第三方模块支持
配置示例:(需要第三方模块如ngx_http_upstream_hash_module)

基础轮询配置:

带权重和故障转移的配置:

max_fails 表示允许失败的次数,fail_timeout 表示失败后暂停转发的时间。
高可用与健康检查
Nginx 开源版自带被动健康检查,仅在请求失败时标记服务器不可用。如需主动健康检查(定时探测后端状态),可选用:
Nginx Plus 版本;
第三方模块如 nginx_upstream_check_module。
2.5 负载均衡总结
Nginx 负载均衡就是通过反向代理把客户端请求按策略分配到多台后端服务器,实现高性能、高可用、可扩展的服务访问
Tomcat 后端服务器
Tomcat 概述
Tomcat 是一个轻量级的 Web 应用服务器(Web Server + Servlet Container),也是一个 Servlet 容器,主要用于托管基于 Servlet、JSP、Spring MVC 等技术的 Java Web 应用。
主要功能包括:
接收 HTTP 请求(内置了一个简单的 HTTP 服务器)
将请求分发给对应的 Web 应用(基于 URL 映射)
执行 Servlet / JSP 并生成响应
返回 HTTP 响应给客户端
运行原理:
1、请求入口与代理
用户通过浏览器发起请求(如访问网站),首先由Nginx服务器(监听80端口)接收。
Nginx作为反向代理,将请求转发至Tomcat的8080端口(Tomcat默认服务端口)。
2、Web容器处理请求
Tomcat的Web容器接收转发后的请求,解析请求类型(例如识别到需要处理index.jsp动态页面)。
容器根据URL映射确定对应的Web应用资源。
3、JSP到Servlet的转换
JSP容器将index.jsp文件中的Java代码(如<% … %>标签)翻译成完整的Servlet代码(本质是一个Java类)。
此步骤会生成Servlet的.java文件,并编译为.class字节码文件(仅首次请求或修改时触发)。
4、Servlet执行与业务逻辑
Servlet容器(如Tomcat中的Catalina)加载并执行编译后的Servlet。
Servlet处理业务逻辑,可能包含:
调用API接口(如与淘宝/京东等第三方服务交互);
连接MySQL数据库(执行查询或更新操作);
生成动态内容(如HTML响应)。
5、响应返回客户端
Servlet将处理结果返回给Web容器,容器封装为HTTP响应。
响应通过Nginx原路返回至用户浏览器,完成整个流程。
主要配置文件
Tomcat 的核心配置文件主要有:
调用应用接口
应用接口:Tomcat 负责将请求转交给指定的 Servlet 或框架(如 Spring MVC);
当你的应用部署到 Tomcat 中时,Tomcat 会:
在启动时加载你的 web.xml 或注解(如 @WebServlet)
创建并初始化 Servlet
当有 HTTP 请求时,将请求参数封装成 HttpServletRequest
调用你的 Servlet 或框架(如 Spring MVC 的 DispatcherServlet)
你的业务代码处理完成后返回 HttpServletResponse
也就是说,Tomcat 并不关心业务逻辑,只负责把请求转给你的代码执行。
调用数据库接口
数据库接口:
可通过 JNDI 数据源实现数据库连接池的配置与管理,提升性能与可维护性。
Tomcat 提供了 JNDI 数据源 支持,让应用能复用数据库连接池:
配置数据源:
在 context.xml 或某个应用的 META-INF/context.xml:
应用代码获取数据源
这样做的好处:
连接池由 Tomcat 管理,性能更好
数据源配置与应用解耦,方便运维
tomcat复制:
关闭防火墙与增强功能

JDK 安装与环境变量配置

添加以下内容:
执行 source /etc/profile 使配置生效。
安装与启动 Tomcat



tomcat总结:
本质:Tomcat 是 Java Web 应用的运行容器,负责接收 HTTP 请求、调用 Servlet、返回响应
原理:Connector 监听请求 → Mapper 分发 → Servlet 执行 → 返回响应
配置文件:server.xml(端口、Host)、web.xml(全局)、context.xml(数据源)、tomcat-users.xml(用户)
应用接口调用:Tomcat 把请求交给你的 Servlet/框架
数据库接口调用:通过 JNDI 数据源或自己管理 JDBC 连接
更多推荐

所有评论(0)