云计算大数据—— Nginx反向代理与负载均衡实战
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
反向代理与负载均衡是 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 的核心工作流程可简化为以下几个步骤:
- 启动
加载 server.xml 配置,启动各个 Connector (监听端口,如 8080)
初始化 Service 、 Engine 、 Host 、 Context 组件
创建并初始化 Servlet 容器 - 接收请求
Connector 监听 HTTP 请求(基于 NIO/线程池)
请求被封装为 Request 对象 - 请求分发
根据 URL → 找到对应的 Context (即某个 Web 应用)
找到对应的 Wrapper (某个 Servlet) - 执行 Servlet
Tomcat 调用 Servlet 的 service() 方法
Servlet 处理请求,可能访问数据库或调用其他 API
返回 Response 对象 - 响应客户端
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 领域的职业发展与技术深耕。。
更多推荐



所有评论(0)