Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 加速
便于扩展动态和静态可以独立部署、独立扩容