提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

反向代理与负载均衡是 Nginx 最核心的应用场景,二者相辅相成:反向代理隐藏了后端服务的真实地址,实现了请求的转发与隔离,同时提供了 SSL 终结、缓存、防盗链等附加能力;负载均衡则将海量请求合理分发至多个后端节点,实现了算力的横向扩展,既提升了系统的并发处理能力,又通过健康检查机制保障了服务的高可用性。无论是中小型应用的架构升级,还是大型分布式系统的流量调度,这两项技术都是不可或缺的基础组件。

一、反向代理

1.1 反向代理原理

反向代理是Nginx的核心功能之一,其工作原理如下:

用户请求首先到达 Nginx 服务器
Nginx根据配置将请求转发给后端应用服务器/业务服务器(如Tomcat、Node.js、Spring Boot等)
后端:php python java(java后端 、tomcat 、微服务)
Nginx 在这一过程中充当“中转站”的角色,客户端并不知道真正提供服务的后端服务器是哪一台,从而实现了请求的转发与隐藏后端服务器的作用

二、负载均衡

将客户端请求分发到多台后端服务器,提高系统的并发、可用性和稳定性。

2.1基本原理

Nginx 作为反向代理服务器,接收来自客户端的请求,然后根据配置的负载均衡策略,将请求转发到后
端的多个应用服务器(upstream server)。
好处:
1.提高性能:分担单台服务器压力
2.高可用性:某台服务器宕机,Nginx 自动转发到其他正常的节点
3.可扩展性:轻松添加或移除后端节点

2.2 常见负载均衡策略

以下是 Nginx 支持的几种常见的分流算法:

2.2.1 轮询(Round Robin)

轮询算法是 Nginx 的默认分流算法。它按顺序将请求依次分配给每一台后端服务器,直到最后
一台服务器,然后重新从第一台服务器开始。这种方法简单且均匀地分配了流量。
数据流向:每个请求依次被分配到下一个服务器。假设有三台服务器(Server A、Server B、Server
C),第一个请求被分配到 Server A,第二个请求分配到 Server B,第三个请求分配到 Server C,第四
个请求又回到 Server A,依此类推。
特点:请求均匀分布,无视服务器的当前负载和响应时间

2.2.2 最少连接数(Least Connections)

最少连接数算法将请求分配给当前活动连接数最少的服务器。这种算法适用于请求处理时间不均匀的情
况,可以有效平衡服务器的负载。
数据流向:每个请求被分配到当前连接数最少的服务器。例如,Server A 有 2 个连接,Server B 有 5 个
连接,新的请求会被分配到 Server A。
特点:动态均衡负载,适用于请求处理时间不一的场景。

2.2.3 IP 哈希(IP Hash):

IP 哈希算法通过计算客户端 IP 地址的哈希值,将请求始终分配给同一台服务器。适用于需要将特定客户
端的请求固定在同一台服务器上的场景。
数据流向:每个客户端的 IP 地址被哈希计算,然后根据哈希值将请求固定分配到某一台服务器。假设客
户端 X 的哈希值指向 Server A,客户端 Y 的哈希值指向 Server B,则无论多少次请求,X 的请求总是流
向 Server A,Y 的请求总是流向 Server B。
特点:同一个客户端总是被分配到同一台服务器,有助于会话保持。

2.2.4 加权轮询(Weighted Round Robin):

加权轮询算法允许为每台服务器设置权重,权重越大的服务器将会获得更多的请求。适用于服务器性能
不均衡的情况。
数据流向:根据服务器设置的权重值分配请求。假设 Server A 权重为 3,Server B 权重为 1,则 4 个请
求中,3 个会被分配到 Server A,1 个会被分配到 Server B。
特点:高权重服务器接收更多的请求,适用于服务器性能差异较大的场景

三、后端 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 部署)等的应用

upstream backend {
server 192.168.0.101 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.0.102 weight=1 max_fails=3 fail_timeout=30s;
}
文件 作用
conf/server.xml
Tomcat 的主配置文件,定义 Connector (端口、协议)、 Engine 、
Host 、 Context 等
conf/web.xml 全局的 Web 应用默认配置(比如默认的 MIME 映射、默认 Servlet)
context.xml 定义 Web 应用级别的配置,如数据源(JNDI)、Session 配置
tomcat-users.xml
用户、角色和安全相关配置,用于 Manager App、Admin Console 登录
应用内的 WEBINF/web.xml
每个 Web 应用自己的 Servlet、Filter、Listener 配置

3.2 运行原理

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

  1. 启动
    加载 server.xml 配置,启动各个 Connector (监听端口,如 8080)
    初始化 Service 、 Engine 、 Host 、 Context 组件
    创建并初始化 Servlet 容器
  2. 接收请求
    Connector 监听 HTTP 请求(基于 NIO/线程池)
    请求被封装为 Request 对象
  3. 请求分发
    根据 URL → 找到对应的 Context (即某个 Web 应用)
    找到对应的 Wrapper (某个 Servlet)
  4. 执行 Servlet
    Tomcat 调用 Servlet 的 service() 方法
    Servlet 处理请求,可能访问数据库或调用其他 API
    返回 Response 对象
  5. 响应客户端
    Tomcat 将 Response 转换为 HTTP 响应报文
    通过 Socket 返回给客户端浏览器

3.3总结

tomcat 即使java写的一个web服务器
java如何简单优化内存,初始内存,256M 1G 优化 jdk

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

四、Nginx + Tomcat 实战:反向代理与负载均衡

4.1 环境规划

Nginx 负载均衡器:192.168.10.110:80
Tomcat 服务器1:192.168.10.123:8080
Tomcat 服务器2:192.168.10.123:8081

4.2 Nginx 负载均衡器部署

安装依赖与编译安装

yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
cd /opt
tar zxvf nginx-1.20.2.tar.gz -C /opt/
cd nginx-1.20.2/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \									#启用文件修改支持
--with-http_stub_status_module \					#启用状态统计
--with-http_gzip_static_module \					#启用 gzip静态压缩
--with-http_flv_module \							#启用 flv模块,提供对 flv 视频的伪流支持
--with-http_ssl_module								#启用 SSL模块,提供SSL加密功能
--with-stream										#启用 stream模块,提供4层调度

----------------------------------------------------------------------------------------------------------
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-stream  --with-http_ssl_module

make && make install

# 创建系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

chmod 754 /lib/systemd/system/nginx.service
# 添加服务配置内容
systemctl start nginx
systemctl enable nginx

4.3 Tomcat 应用服务器部署

systemctl stop firewalld
setenforce 0

tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/

vim /etc/profile
export JAVA_HOME=/usr/local1/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

source /etc/profile
==============================================================
tar zxvf apache-tomcat-8.5.35.tar.gz

mv /opt/apache-tomcat-8.5.35/ /usr/local/tomcat

/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh

netstat -ntap | grep 8080

第二台直接拷贝即可  
cp -r /usr/local/tomcat     /usr/local/tomcat1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.4 动静分离配置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.5Nginx server 配置

准备静态页面和静态图片
echo '<html><body><h1>这是静态页面</h1></body></html>' >
/usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/img
vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

......
http {
......
#gzip on;
#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
upstream tomcat_server {
   server 192.168.10.23:8080 weight=1;
   server 192.168.10.22:8080 weight=1;
   server 192.168.10.22:8081 weight=1;
}
server {
   listen 80;
   server_name www.kgc.com;
   charset utf-8;
#access_log logs/host.access.log main;
location ~ .*\.jsp$ { 
      proxy_pass http://tomcat_server;
      proxy_set_header HOST $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   }
   
   #配置Nginx处理静态图片请求
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
    root /usr/local/nginx/html/img;
    expires 10d;
 }
   
  测试效果
测试静态页面效果
浏览器访问 http://192.168.10.161/
浏览器访问 http://192.168.10.16108E18C1BE7D8D483F8560380E3DB2B55.png
测试负载均衡效果,不断刷新浏览器测试
浏览器访问 http://192.168.10.161/index.jsp

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

总结
本文全面介绍了Nginx反向代理与负载均衡的配置实践,以及Tomcat应用服务器的部署与集成方案。主要内容包括:

Nginx反向代理​​:工作原理、基础配置方法
负载均衡策略​​:详细解析6种主流算法及适用场景
Tomcat核心知识​​:架构原理、关键配置、数据源集成
实战部署方案​​:完整的Nginx+Tomcat负载均衡环境搭建
动静分离实现​​:智能区分处理动态请求和静态资源

Nginx 反向代理与负载均衡的学习,是一个从 “原理理解” 到 “实战配置”,再到 “架构优化” 的渐进过程。基础阶段需掌握核心配置指令与场景化应用,进阶阶段则要围绕 “高可用、高性能、可扩展” 三大核心诉求,结合企业级生产环境的实际需求,不断优化配置策略、集成配套工具、完善监控体系。
通过本实战内容的学习与进阶路径的探索,读者不仅能掌握 Nginx 的核心技能,更能建立起分布式系统的流量调度思维 —— 理解 “如何通过技术手段拆分压力、隔离风险、提升效率”。无论是应对日常的服务部署、性能优化,还是复杂的分布式架构设计,这些技能与思维都将成为重要的技术储备,助力在 IT 领域的职业发展与技术深耕。。

更多推荐