Nginx 教学工作区 · 课程 0001 · 约 20 分钟 · 前置:无 · 2026-09-24

正向代理 vs 反向代理:先把方向搞对

这节课的胜利:用一句话说清正向与反向代理的差别(以及各自站在谁那一边), 并用 Docker 起一个真 Nginx、把它完整的生效配置 dump 出来(nginx -T)—— 你会第一次看到 events / http / server / location 四层的真实样子。

为什么是这一步

使命说 Nginx 是"把服务暴露出去"的默认答案。 但绝大多数配置事故的根源是没搞清方向:以为在配"代理客户端",其实在配"代理服务端"。 这一节先把这个方向钉死,再去看真配置。

最小知识:三条

  1. 正向代理站在客户端一边,反向代理站在服务端一边。 正向代理:客户端主动把请求交给它,由它替你去访问(它知道你是谁,服务器不知道)。 反向代理:客户端以为它就是在访问服务器,其实是它转交给后端(它知道后端是谁,客户端不知道)。
  2. Nginx 是"少量进程 + 事件驱动"。它不像传统模型那样"一个请求一个进程/线程",而是几个 worker 进程 用事件循环处理成千上万个连接 —— 这就是它省内存、扛并发的原因。
  3. 配置是四层嵌套。events(怎么处理连接)→ http(HTTP 全局) → server(一个站点/域名)→ location(某个路径前缀)。理解嵌套关系,才知道某个指令该写在哪一层。

动手:起一个真 Nginx,把它读透

本机没装 Nginx,但我们有 Docker(镜像 nginx:alpine 已预拉)。先启动 Docker Desktop —— 它不开机自启,上课前手动起;用完 docker desktop stop 释放内存:

# ① 起一个 Nginx 容器,把容器 80 端口映射到本机 8080
docker run -d --rm -p 8080:80 --name ng nginx

# ② 验证它在工作
curl -I http://localhost:8080
# 应看到 HTTP/1.1 200 OK 与 Server: nginx/… 字样

# ③ 看它默认站点的配置
docker exec ng cat /etc/nginx/conf.d/default.conf

# ④ 关键一步:dump 出"所有生效的配置"(含 include 进来的主配置)
docker exec ng nginx -T

在 nginx -T 的输出里找这四样东西:

找什么你应该看到
worker 进程数worker_processes auto; —— 通常等于 CPU 核数
events 块worker_connections 1024; —— 每个 worker 能同时处理多少连接
server 块listen 80; + server_name localhost; —— 一个站点的门牌号
location 块location / { root /usr/share/nginx/html; index index.html; } —— 路径怎么映射到文件

收尾(容器是 --rm 起的,停掉即清理):

docker stop ng

加一道自检:在 ③ 的输出里,root 指向 /usr/share/nginx/html —— 这是容器内的路径。如果你想换成自己的网页目录,该怎么做?先在心里答,下一节讲"挂载"时验证。

自测(选项一样长,别从长度上猜)

1. 反向代理与正向代理的关键差别?

对。方向决定"谁被隐藏":反向代理藏后端(客户端只知道入口),正向代理藏客户端(服务器只知道代理)。加密与否是另一件事。

2. nginx -T 比直接读 nginx.conf 好在哪?

对。主配置里常有一堆 include(如 conf.d/*.conf),-T 输出的是"全部展开后的最终生效配置" —— 排查时读它,不会漏。

3. Nginx 为什么能用少量进程扛住大量连接?

对。事件驱动:少量 worker 用非阻塞 IO + 事件循环照看成千上万连接,而不是"一连接一进程/线程"。省内存,也省上下文切换。