Nginx 全解析:反向代理、负载均衡与动静分离一文通
Nginx 是什么?
Nginx 是一款高性能的开源 Web 服务器和反向代理服务器,采用事件驱动的异步非阻塞架构,能以极低的内存消耗轻松处理数万并发连接。它最常见的用途是作为静态资源服务器、反向代理和负载均衡器——即把用户请求分发给后端多台应用服务器,同时对外只暴露 Nginx 自身,从而提升性能、安全性和可用性。
Nginx 通常被用来实现以下四个功能:正向代理、反向代理、负载均衡、动静分离。
正向代理(Forward Proxy)
正向代理是位于客户端和目标服务器之间的代理服务器,代表客户端向目标服务器发送请求。目标服务器只看到代理的 IP,不知道真正的客户端是谁。
客户端知道要访问谁,但让代理“替自己去拿“,隐藏的是客户端身份。
常见用途:
- 科学上网:客户端无法直接访问目标站点,通过代理中转
- 隐藏真实 IP:保护客户端隐私
- 访问控制:企业通过代理限制员工可访问的网站
- 缓存加速:代理缓存常用资源,减少重复请求
与之对应的是反向代理——隐藏的是服务器身份,代表服务器接收客户端请求(Nginx 最典型的用法)。
反向代理(Reverse Proxy)
反向代理是位于后端服务器前面的代理服务器,代表服务器接收客户端请求,再转发给后端真实服务器处理,最后把响应返回给客户端。客户端全程只知道代理的地址,不知道后端服务器的存在。
正向代理“替客户端出门“,反向代理“替服务器迎客“,隐藏的是服务器身份。反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
常见用途:
- 负载均衡:把请求分发到多台后端服务器,避免单点过载
- 安全防护:隐藏真实服务器 IP,收敛攻击面,抵御 DDoS
- SSL 终止:由代理统一处理 HTTPS 加解密,减轻后端负担
- 缓存加速:缓存静态内容,加快响应速度
- 统一入口:一个域名背后对接多个微服务
负载均衡
负载均衡是在反向代理基础之上实现的,就是把用户请求分摊到多台服务器上处理,避免单台服务器过载,从而提升系统的性能、可用性和可扩展性。
核心价值
| 价值 | 说明 |
|---|---|
| 提高性能 | 请求分散处理,降低单机压力,缩短响应时间 |
| 高可用 | 某台服务器挂了,自动将流量切到其他健康节点 |
| 水平扩展 | 流量增大时加机器即可,无需升级单机硬件 |
| 安全防护 | 对外只暴露负载均衡器地址,隐藏后端服务器 |
常见算法
- 轮询(Round Robin):按顺序依次分配,最简单
- 加权轮询:性能强的服务器分配更多请求
- 最少连接(Least Connections):优先分给当前连接数最少的服务器
- IP 哈希:同一客户端 IP 始终分到同一台服务器(保持会话)
- 随机:随机选一台
通俗来说:原来一台服务器扛所有请求,变成加一堆服务器大家一起扛,请求来了就分给不同的机器处理,谁都不会被压垮——这就是负载均衡。
动静分离
什么是动静分离?
将动态请求和静态资源分开处理:
- 静态资源:HTML、CSS、JS、图片、视频、字体等,内容固定不变
- 动态请求:需要后端运算的请求,如 API 接口、数据库查询、用户登录等
核心思路:Nginx 直接返回静态文件,动态请求转发给后端服务器(如 Tomcat、Node.js、PHP-FPM)。
为什么要做动静分离?
| 好处 | 说明 |
|---|---|
| 性能提升 | Nginx 处理静态文件效率极高,比 Tomcat 快很多倍 |
| 减轻后端压力 | 后端只处理业务逻辑,不用管静态资源 |
| 便于缓存 | 静态资源可以设置浏览器缓存、CDN 加速 |
| 便于扩展 | 动态和静态可以独立部署、独立扩容 |