主题
01 · 认识 Nginx:它到底是什么
生活类比:Nginx 就是写字楼大堂的前台 + 大堂经理——所有访客(HTTP 请求)都要先经过它,它负责"是谁来了 → 该去几楼几号 → 顺便登记一下"。
1. 用一张图说清楚 Nginx 在干嘛
没有 Nginx 的世界:
浏览器 ──────► 你的 Node.js 服务(端口 3000)
↑
├─ 你得自己写文件托管逻辑
├─ 你得自己处理 HTTPS
├─ 你得自己防 DDoS
└─ 一台机器顶不住,扩容怎么办?加上 Nginx 的世界:
┌──────────────────────────────┐
│ Nginx │
│ ┌────────────────────────┐ │
浏览器 ─────► :443 ─►│ │ HTTPS / HTTP/2 解码 │ │
│ ├────────────────────────┤ │
│ │ 静态文件 → 直接返回 │──┼─► dist/index.html
│ ├────────────────────────┤ │
│ │ /api/* → 后端 │──┼─► Node :3000
│ ├────────────────────────┤ │
│ │ /ws/* → WS 服务 │──┼─► Go :4000
│ ├────────────────────────┤ │
│ │ 限流 / 缓存 / 日志 │ │
│ └────────────────────────┘ │
└──────────────────────────────┘一句话:Nginx 站在最前面,把不同类型的请求分发到对应的"工位"。
2. Nginx 的"四大本职工作"
┌────────────────────────────────────────────────────────────┐
│ ① Web 服务器 → 托管 HTML/JS/CSS/图片 │
│ ② 反向代理 → 把请求转发给后端服务 │
│ ③ 负载均衡 → 把请求平均分给多台后端 │
│ ④ HTTP 缓存 → 把热点数据缓存在自己这儿,少打后端 │
└────────────────────────────────────────────────────────────┘类比 · 奶茶店连锁总部
| Nginx 概念 | 奶茶店类比 |
|---|---|
| 静态文件服务 | 总部直营店:菜单、海报直接挂墙上给你看 |
| 反向代理 | 前台帮你转单到后厨制作 |
| 负载均衡 | 多个店员,"下一位"轮流接单 |
| 缓存 | 经典款珍珠奶茶提前批量做好,直接出杯 |
| 限流 | 高峰期排队取号,超过 50 个人就停止接单 |
| HTTPS | 门口的安检,验明正身才能进店 |
核心点:Nginx 自己不做奶茶(不跑业务代码),它是那个让奶茶店运转得井井有条的"门面 + 调度员"。
3. 为什么 Nginx 这么火?三个硬核原因
3.1 性能猛 —— C10K 问题的标准答案
C10K = 单机能不能扛住 1 万个并发连接?
| 服务器 | 模型 | 1 万连接吃多少内存 |
|---|---|---|
| Apache | 一连接一线程/进程 | ~10GB(每线程 1MB 栈) |
| Nginx | 事件驱动 + 单线程 | ~100MB |
Nginx 用的是异步非阻塞模型(类比 Node.js / Java NIO):一个工作进程靠 epoll/kqueue 循环监听几万个连接,谁来活儿就处理谁,绝不傻等。
线程模型(Apache): 事件模型(Nginx):
┌───┬───┬───┬───┬───┐ ┌────────────────────────┐
│线1│线2│线3│线4│线5│ │ worker (epoll loop) │
└───┴───┴───┴───┴───┘ │ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ │
一连接占一个线程 │ conn1 conn2 ... connN │
└────────────────────────┘⚠️ 这是面试必考点,详见
qa.md第 1 题。
3.2 配置简单(相对而言)
整个 Nginx 配置文件就是几个嵌套的 {},关键词十几个:server / location / proxy_pass / try_files / return……
学一周就能写出能用的配置,学一个月就能改出生产级别。
3.3 模块丰富 + 生态强大
- 官方模块:HTTP 核心、SSL、反向代理、缓存、压缩、限流……
- 第三方扩展:
- OpenResty:Nginx + Lua 脚本,能直接在 Nginx 里写业务逻辑(高德、腾讯都在用)
- Tengine:阿里在 Nginx 上的增强版(淘宝双 11 抗住的就是它)
- APISIX / Kong:基于 Nginx 的现代 API 网关
4. Nginx vs 其他常见服务器(一张表看完)
| 对比项 | Nginx | Apache | Caddy | Node.js (Express) |
|---|---|---|---|---|
| 性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 配置难度 | 中 | 较易 | 极易(自动 HTTPS) | 要写代码 |
| 静态文件 | 极强 | 强 | 强 | 弱(要中间件) |
| 反向代理 | 极强 | 强 | 强 | 中(要 http-proxy) |
| 业务逻辑 | 弱(需 Lua) | 强(PHP 模块) | 弱 | 极强 |
| 适合场景 | 入口 / 网关 / CDN | 老 PHP 站 / 内网 | 个人小站 | 业务后端 |
结论:业内默认 = Nginx 当入口,业务代码跑在它后面。
5. Nginx 的"演化史"——一段故事
2002 ─────► Igor Sysoev 在俄罗斯 Rambler 公司开始写
2004 ─────► 第一个公开版本发布(开源 BSD-2 协议)
2011 ─────► Nginx Inc. 成立,开始做企业版(Nginx Plus)
2019 ─────► F5 Networks 收购 Nginx,现在 Nginx 是 F5 的产品
2020+ ────► CNCF 时代:Ingress Controller、Service Mesh、APISIX 都基于 Nginx冷知识:Igor 当年写 Nginx,最初是为了单机扛住 1 万个 RSS 订阅请求。结果一不小心写了个改变互联网入口层的产品。
6. 你需要什么前置知识?
| 知识 | 是否必备 | 不会能学吗? |
|---|---|---|
| HTTP 基础(请求/响应/状态码) | ✅ 必备 | 不会会很懵 |
| Linux 命令行(cd/cat/curl) | ✅ 必备 | 不会得先去把 cd ls cat 学了 |
| Docker 基础 | ⭕ 推荐 | 不会就用 apt 安装也行 |
| 域名 / DNS 概念 | ⭕ 推荐 | 学到第 8 章 HTTPS 时再补也行 |
| 编程语言 | ❌ 不需要 | Nginx 配置不是编程 |
7. 接下来怎么学
你在这里
↓
01 ─► 02 安装 ─► 03 配置文件 ─► 04 静态文件 ─► ……章末小测(先猜,下一章对答案):
- Nginx 是用什么语言写的?
- Nginx 监听的"默认 HTTP 端口"是多少?
- 一台 Nginx 能同时托管几个网站?
- 修改了 nginx.conf 必须重启 Nginx 吗?
8. 章末面试题速览(详见 qa.md)
章节面试题以最简短结论 + 一个反问形式记忆,详细参考答案在
qa.md。
- Nginx 为什么比 Apache 快? → 事件驱动 vs 多线程;epoll vs select。
- Nginx 是单线程还是多线程? → 多进程(master + 多 worker),每个 worker 单线程跑事件循环。
- 正向代理 vs 反向代理? → 正向代理代理"客户端"(如 VPN);反向代理代理"服务器"(如 Nginx)。
🎬 可视化演示
下方 demo 用动画展示「没有 Nginx vs 有 Nginx」时一次浏览器请求是怎么走的——你会清楚看到 Nginx 像"前台"那样把不同请求分流到静态文件、API、WebSocket。
🎬 可视化演示
演示加载缓慢或样式异常?点此在新标签页打开 ↗