Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Nginx 基础教程

1. Master / Worker 架构

Nginx 是 多进程事件驱动模型:

  • master 进程
  • 读取配置文件
  • 管理 worker 进程(启动、停止、重载)
  • worker 进程
  • 真正处理客户端请求
  • 每个 worker 单线程
  • 使用 “异步非阻塞 + epoll” 处理大量连接

📌 核心原则:worker_processes = CPU 核心数(auto 默认最优)

2. 事件驱动(Event-driven)

Nginx 使用 epoll(Linux)模型:

  • 非阻塞 IO
  • 事件循环
  • 少量线程处理大量并发

这是 Nginx 性能高的根本原因。

3. 请求处理流程(核心)

浏览器请求经过:

listen -> server -> location -> upstream / proxy_pass -> response

3.1 listen

监听端口、协议:

listen 80;
listen 443 ssl;
http2 on;

3.2 server

根据 Host 匹配虚拟主机:

server_name example.com;

3.3 location

根据 URL 路径匹配路由规则:

location /api/ {
    proxy_pass http://backend;
}

3.4 upstream

定义后端负载均衡集群:

upstream backend {
    server 127.0.0.1:8000;
    server 127.0.0.1:8001;
}

3.5 output

返回响应给客户端。

4. proxy 代理模式

Nginx 经常作为反向代理:

location / {
    proxy_pass http://127.0.0.1:8080;
}
  • 代理请求 -> 转发到后端服务器
  • 可转发所有 header / body / cookie

5. 静态资源服务(文件服务器)

location /img/ {
    root /data/www;
}

依赖 sendfile on; 提升本地文件读取速度。

6. 负载均衡(upstream)

支持多种策略:

  • round_robin(默认)
  • least_conn(最少连接)
  • ip_hash(保持用户会话)
  • weight(权重)
upstream api {
    least_conn;
    server 10.0.0.1;
    server 10.0.0.2;
}

7. 缓存(proxy_cache / fastcgi_cache)

Nginx 可做反向代理缓存:

proxy_cache_path /cache keys_zone=mycache:50m;
proxy_cache mycache;

但你之前说了“不缓存”,那默认即可(Nginx 默认不开缓存)。

8. 变量系统(非常重要)

Nginx 有大量内置变量:

变量 说明
$host 请求的 Host 头
$uri 请求路径
$request_uri 原始URI(含参数)
$args query 参数
$remote_addr 客户端IP
$proxy_add_x_forwarded_for XFF链

示例:

proxy_set_header Host $host;

9. 匹配规则(location 优先级)

从高到低:

  1. = 精确匹配
  2. ^~ 前缀优先
  3. 正则:~ / ~*
  4. 普通前缀匹配(从最长开始)
  5. / 默认

示例:

location = /admin {}
location ^~ /static {}
location ~ \.php$ {}
location / {}

10. rewrite + 内部跳转

rewrite 用正则重写 URL:

rewrite ^/img/(.*) /pictures/$1 last;

常用于:

  • 前端 history 路由
  • SEO URL 调整
  • 兼容旧接口

11. 模块系统

Nginx 是模块化系统:

  • 核心模块(http、stream、mail)
  • 第三方模块(Lua、Headers-More、Proxy-Cache-Purge…)
  • 动态模块 .so

12. HTTP / Stream 双协议

  • HTTP 模块:web、proxy、负载均衡
  • Stream 模块:TCP/UDP 代理
    • 用于 MySQL / Redis / SMTP 代理

示例:

stream {
    upstream mysql {
        server 10.0.0.1:3306;
    }
    server {
        listen 3307;
        proxy_pass mysql;
    }
}

13. SSL / HTTP/2 / HTTP/3 支持

新写法:

listen 443 ssl;
http2 on;

HTTP/3:

listen 443 quic reuseport;
http3 on;

🎯 一句话总结 Nginx

一个基于事件驱动的高性能反向代理 / 静态服务器 / 负载均衡器,核心是 master/worker + epoll。