Skip to content

Nginx ​

这里主要整理 Nginx 这条线。比起上来就看零散配置,我更想把它在系统里到底扮演什么角色讲清楚:

  1. Nginx 是什么
  2. 它在系统架构里通常放在哪一层
  3. 它最常解决什么问题
  4. 哪些能力属于它的核心使用场景
  5. 工程上最常见的边界和误区是什么

Nginx 可以看成一个站在客户端和后端服务之间的入口层组件,负责接请求、分发流量、做代理、处理静态资源,也经常顺手把 HTTPS 一起接住。

这里先说一个很容易混的点:

Nginx 既可以作为 Web 服务器 使用,也可以作为 反向代理服务器 和 网关入口 使用。
工程里最常见的语境,通常不是“拿它写业务”,而是“把它放在系统入口做流量治理”。


1. 为什么很多系统前面都会放一个 Nginx ​

如果浏览器直接访问后端应用服务,会很快遇到这些问题:

  1. 静态资源谁来分发
  2. 多台后端实例怎么统一对外暴露
  3. HTTPS 证书放在哪里管理
  4. 接口路径怎么路由到不同服务
  5. 缓存、压缩、跨域这些能力放在哪一层最合适

这就是 Nginx 经常出现的原因。

简单说,它就是在业务服务前面加一层统一入口,把流量接入、代理转发、静态交付和性能优化这类事情集中处理掉。


2. Nginx 最常见的几种角色 ​

2.1 Web 服务器 ​

这里的 Web 服务器 可以理解成 专门接收 HTTP 请求并返回页面、文件或接口响应的一类服务器程序。

Nginx 作为 Web 服务器时,常见任务包括:

  1. 返回静态页面
  2. 分发前端构建产物
  3. 提供图片、脚本、样式文件

2.2 反向代理 ​

反向代理 可以理解成 客户端先访问代理层,再由代理层把请求转发给后端真实服务。

它解决的是:

  1. 隐藏后端真实地址
  2. 统一入口
  3. 把路径转发到不同服务
  4. 配合负载均衡分发流量

这也是 Nginx 在后端架构里最常见的角色。

2.3 负载均衡入口 ​

负载均衡 可以理解成 把请求按某种策略分散到多台后端实例上。

它解决的是:

  1. 单机压力过大
  2. 后端多实例如何统一对外服务
  3. 某台实例故障时如何提升可用性

2.4 HTTPS 终止层 ​

HTTPS 终止 指的是:浏览器和 Nginx 之间使用 HTTPS,加密在 Nginx 这一层完成,然后再由 Nginx 转发给后端服务。

它的价值在于:

  1. 统一证书管理
  2. 简化后端 TLS 配置
  3. 更适合作为统一接入层治理

3. 一条请求经过 Nginx 时通常会发生什么 ​

可以用一条简单链路理解:

  1. 浏览器发起请求
  2. 请求先到 Nginx
  3. Nginx 根据 server 和 location 规则匹配
  4. 如果是静态资源,直接返回文件
  5. 如果是动态请求,代理到后端应用
  6. 如果配置了缓存、压缩、HTTPS 或跨域处理,也会在这一层生效

这里的 server 可以看成 Nginx 中按域名或端口划分的一组站点级配置。

这里的 location 可以理解成 Nginx 中按 URL 路径做规则匹配和处理的一组路由规则。


4. Nginx 最值得优先掌握的几条能力线 ​

4.1 反向代理 ​

这是最核心的一条主线。

典型场景:

  1. /api 转发给 Java 或 Node 服务
  2. /admin 转发给后台管理服务
  3. / 直接返回前端页面

4.2 负载均衡 ​

当后端不止一台机器时,Nginx 可以按策略分发请求。

常见策略包括:

  1. 轮询
  2. 加权轮询
  3. IP Hash
  4. 最少连接

4.3 静态资源交付 ​

Nginx 很适合处理:

  1. HTML
  2. CSS
  3. JavaScript
  4. 图片
  5. 字体文件

这条主线通常会和前端构建产物、缓存头、压缩和 CDN 一起出现。

4.4 缓存与压缩 ​

它们解决的是:

  1. 响应体过大,传输慢
  2. 静态资源频繁重复请求
  3. 源站压力过高

4.5 HTTPS 与安全入口 ​

这条主线主要关注:

  1. 证书配置
  2. HTTP 跳转 HTTPS
  3. TLS 终止
  4. 常见安全响应头

5. 正向代理和反向代理到底有什么区别 ​

这是理解 Nginx 时最容易混的概念之一。

对比项正向代理反向代理
代理谁代理客户端代理服务端
客户端是否知道目标服务通常知道不一定知道后端真实实例
常见场景企业代理、访问外部资源网站入口、API 网关、流量转发
工程里和 Nginx 的关系可做,但不是最常见语境是最常见语境

可以这样记:正向代理更像帮客户端出去访问,反向代理更像帮服务端统一接请求。


6. 哪些问题最适合放在 Nginx 这一层解决 ​

更适合放在 Nginx 的,通常是这些问题:

  1. 静态资源分发
  2. 请求转发与路径路由
  3. 多实例负载均衡
  4. HTTPS 证书统一管理
  5. gzip、缓存头、跨域等通用接入层能力

不太适合放在 Nginx 的,通常是:

  1. 复杂业务编排
  2. 重业务状态处理
  3. 核心业务鉴权逻辑的全部细节
  4. 数据查询与业务计算

也就是说,Nginx 更适合做 流量接入层问题,而不是把它变成承载复杂业务逻辑的应用层。


7. 当前目录下的专题 ​

推荐阅读顺序:

  1. 看这篇总览,建立 Nginx 的整体定位
  2. 再看“反向代理与负载均衡”,理解它如何接流量和分发流量
  3. 最后看“静态资源、缓存与 HTTPS”,理解它如何提升交付效率和统一入口治理

8. 常见误区 ​

8.1 误区一:把 Nginx 只理解成“能访问网页的服务器” ​

这太窄了。工程里更常见的理解是:它是统一接入层的一部分。

8.2 误区二:以为用了 Nginx 就天然高可用 ​

Nginx 可以提升流量治理能力,但如果入口层自己只有一台机器,它本身也可能成为单点。

8.3 误区三:把所有逻辑都堆进 Nginx 配置 ​

Nginx 适合做规则明确、偏基础设施层的问题。
如果把太多复杂业务判断塞进去,配置会变得难维护。


9. 一句话总结 ​

Nginx 最值得先建立的认知不是“某条配置指令怎么写”,而是:

它为什么站在系统入口、它解决哪些接入层问题、哪些能力应该放在这一层、哪些问题又不该放到这一层。

基于 VitePress 构建的个人技术笔记。