Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Nginx 核心概念

一、Nginx 是什么(本质)

一句话定义:

Nginx 是一个 基于事件驱动、异步非阻塞 I/O 的多进程网络服务器与反向代理平台。

它既是:

  • Web Server(静态文件)
  • Reverse Proxy(反向代理)
  • Load Balancer(负载均衡)
  • API Gateway(网关)
  • TCP/UDP Proxy(四层代理)

二、核心架构模型(最重要)

Master / Worker 架构

            Master Process
          /        |        \
     Worker #1  Worker #2  Worker #N

各自职责:

Master

  • 读取/校验配置
  • 监听端口
  • fork worker
  • 平滑 reload(不中断服务)
  • 管理 worker 生命周期

Worker

  • 真正处理请求
  • 单线程
  • 使用事件驱动(epoll)
  • 可同时处理成千上万连接

👉 结论:

  • 没有多线程锁竞争
  • 没有频繁上下文切换
  • 极高并发能力

三、事件驱动模型(性能核心)

传统模型(Apache / Tomcat)

1 请求 = 1 线程/进程

问题:

  • 线程切换开销大
  • 慢请求拖垮系统

Nginx 模型(异步非阻塞)

1 worker + epoll
处理 N 个连接
  • I/O 不阻塞
  • 慢连接不占用 worker
  • 事件触发才处理

👉 这就是 Nginx 高并发的根本原因

四、为什么 worker 是“单线程”反而更快?

因为:

  • 单线程 ⇒ 无锁
  • 无锁 ⇒ 无竞争
  • 无竞争 ⇒ CPU Cache 命中率高

多核通过 多 worker 利用,而不是多线程。

五、请求处理生命周期(必须会讲)

一次 HTTP 请求大致流程:

  1. client 建立 TCP 连接
  2. worker 接收连接(epoll 触发)
  3. 读取请求头
  4. 解析 HTTP 协议
  5. 匹配 server
  6. 匹配 location
  7. 选择模块(static / proxy / fastcgi)
  8. 处理或转发请求
  9. 写回响应
  10. 记录日志
  11. 连接复用 / 关闭

六、核心配置块(语义级理解)

1️⃣ main(全局)

worker_processes auto;

-> 控制 worker 数量

2️⃣ events(事件)

use epoll;
worker_connections 65535;

-> 决定最大并发能力

最大连接 ≈ worker_processes × worker_connections

3️⃣ http(HTTP 引擎)

http {
    server { ... }
}

-> 定义 HTTP 协议层的行为

4️⃣ server(虚拟主机)

server {
    listen 80;
    server_name example.com;
}

-> 类似 Apache 的 VirtualHost

5️⃣ location(请求路由核心)

location /api/ {
}

-> Nginx 最强大的地方 -> 通过 URI 路由请求

七、location 匹配规则(必考)

优先级从高到低:

  1. = 精确匹配
  2. ^~ 前缀匹配(终止正则)
  3. ~ / ~* 正则匹配
  4. 普通前缀匹配
  5. / 默认兜底

八、模块化设计(Nginx 的灵魂)

Nginx 是 模块驱动 的:

  • 核心模块(core)
  • HTTP 模块
  • Stream 模块
  • Mail 模块
  • 第三方模块

👉 请求在处理链路中被多个模块“钩子”接管

这也是:

  • Lua / OpenResty 能扩展的原因
  • Nginx 可定制性极强的原因

九、反向代理的本质

反向代理不是“转发”,而是:

Nginx 作为 请求生命周期的管理者

它负责:

  • 连接管理
  • 失败重试
  • 超时控制
  • header 重写
  • gzip
  • 缓存
  • 日志
  • 安全控制

十、负载均衡的底层逻辑

upstream 的本质:

  • 后端连接池
  • 失败感知
  • 调度算法

常见调度策略:

  • round robin(平均)
  • least_conn(最优)
  • ip_hash(粘性)
  • hash(一致性)

十一、HTTP/1.1 vs HTTP/2(基础差异)

HTTP/1.1

  • 一个连接顺序处理请求
  • Head-of-line blocking

HTTP/2

  • 多路复用
  • 二进制帧
  • Header 压缩
  • 延迟大幅下降

👉 Nginx 作为 HTTP/2 server:

listen 443 ssl;
http2 on;

十二、TCP / OS 层基础(很多人忽略)

Nginx 高性能 = Nginx + OS

关键点:

  • epoll
  • 文件描述符限制(ulimit -n)
  • TCP backlog
  • TIME_WAIT 回收
  • sendfile 零拷贝

十三、为什么 Nginx reload 不会中断服务?

因为:

  • master fork 新 worker
  • 新 worker 接管新连接
  • 老 worker 处理完现有连接后退出

👉 优雅重启(graceful reload)

十四、Nginx 与 Apache 的根本区别

对比 Nginx Apache
并发模型 事件驱动 多进程/线程
内存 极低
静态资源 极强 一般
高并发 天生优势 易崩
动态内容 代理 内嵌模块

十五、设计哲学总结

Nginx 的核心设计哲学:

  • 把复杂留给后端
  • 自己只做“高效的流量调度器”
  • 用最少的资源处理最多的连接