nginx -T)——
你会第一次看到 events / http / server / location 四层的真实样子。
使命说 Nginx 是"把服务暴露出去"的默认答案。 但绝大多数配置事故的根源是没搞清方向:以为在配"代理客户端",其实在配"代理服务端"。 这一节先把这个方向钉死,再去看真配置。
events(怎么处理连接)→ http(HTTP 全局)
→ server(一个站点/域名)→ location(某个路径前缀)。理解嵌套关系,才知道某个指令该写在哪一层。本机没装 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 + 事件循环照看成千上万连接,而不是"一连接一进程/线程"。省内存,也省上下文切换。