Skip to content

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 其他常见服务器(一张表看完)

对比项NginxApacheCaddyNode.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 静态文件  ─►  ……

章末小测(先猜,下一章对答案):

  1. Nginx 是用什么语言写的?
  2. Nginx 监听的"默认 HTTP 端口"是多少?
  3. 一台 Nginx 能同时托管几个网站?
  4. 修改了 nginx.conf 必须重启 Nginx 吗?

8. 章末面试题速览(详见 qa.md)

章节面试题以最简短结论 + 一个反问形式记忆,详细参考答案在 qa.md

  1. Nginx 为什么比 Apache 快? → 事件驱动 vs 多线程;epoll vs select。
  2. Nginx 是单线程还是多线程? → 多进程(master + 多 worker),每个 worker 单线程跑事件循环。
  3. 正向代理 vs 反向代理? → 正向代理代理"客户端"(如 VPN);反向代理代理"服务器"(如 Nginx)。

🎬 可视化演示

下方 demo 用动画展示「没有 Nginx vs 有 Nginx」时一次浏览器请求是怎么走的——你会清楚看到 Nginx 像"前台"那样把不同请求分流到静态文件、API、WebSocket。

🎬 可视化演示

演示加载缓慢或样式异常?点此在新标签页打开 ↗