Nginx 详解 Part4 — 动静分离 / 资源分离 / Rewrite / 其他模块
来源:
raw/day44 nginx详解part4.md— 林海峰 Nginx 课程第四部分 主题:动静分离三大方案、资源分离、Rewrite 重写模块、Nginx 其他常用模块(目录索引/访问控制/认证/状态监控/连接限制/请求限制)
结构总览
动静分离(三大方案)
├─ 方案一:前端代码使用 CDN 地址
├─ 方案二:Web 服务器层 location 分离 + cache
└─ 方案三:七层负载均衡层抽离到独立集群
资源分离
└─ if 判断 User-Agent → 不同 upstream
Rewrite 重写模块
├─ 应用场景:伪静态、协议更换、域名迁移
├─ 五种指令:break / last / if / return / rewrite
├─ 运行逻辑:server 块规则 → loop 循环(最多10次)
└─ rewrite 四种 flag:break / last / redirect / permanent
其他模块
├─ 目录索引(autoindex)
├─ 访问控制(allow / deny)
├─ 访问认证(auth_basic)
├─ 状态监控(stub_status)
├─ 连接限制(limit_conn)
└─ 请求限制(limit_req)
动静分离三大方案
| 方案 | 实施位置 | 优点 | 缺点 |
|---|---|---|---|
| 方案一 | 前端代码 | CDN 加速效果最好 | 需修改代码,更新需刷新 CDN |
| 方案二 | Web 服务器 | 精细化管理,缓存控制灵活 | Web 服务器仍承担部分静态流量 |
| 方案三-1 | 七层负载均衡器 | 动静分离彻底 | 负载均衡器职责不清(既派活又干活) |
| 方案三-2 | 七层负载均衡 + 独立集群 | 职责清晰,可独立扩展 | 架构复杂,成本较高 |
推荐组合:方案一(CDN 加速前端的静态资源)+ 方案二(Web 服务器层精细缓存)+ 方案三-2(LB 层抽离到独立集群)。
资源分离
通过 if 判断 $http_user_agent 等变量,将不同客户端类型分发到不同后端集群(Android / iPhone / PC),可用于移动端/PC 端分离、灰度发布等场景。
Rewrite 重写模块
ngx_http_rewrite_module 提供 URI 改写功能:
- break:终止循环,不再执行后续重写规则
- last:终止本次循环,重新进行 location 匹配
- if:条件判断
- return:返回状态码或重定向,整体结束
- rewrite:
rewrite regex replacement [flag]执行 URL 改写
运行逻辑:请求到达 → 执行 server 块重写规则 → 若重写为完整 URL 则直接跳转 → 否则进入 loop 循环(最多 10 次)→ 执行 location 块重写规则 → 匹配到新 location 则继续 → 结束。
rewrite 四种 flag:break(终止循环)、last(重新 location 匹配)、redirect(302 临时重定向)、permanent(301 永久重定向)。
rewrite vs return:rewrite 支持正则、功能更灵活但稍慢;return 更快、适合简单跳转。生产场景中简单的域名跳转优先用 return。
其他常用模块
| 模块 | 指令 | 功能 |
|---|---|---|
| 目录索引 | autoindex on; | 自动生成目录列表 |
| 访问控制 | allow / deny | 基于 IP 的访问限制 |
| 访问认证 | auth_basic | HTTP 基本认证 + .htpasswd |
| 状态监控 | stub_status on; | 查看 Nginx 连接状态 |
| 连接限制 | limit_conn | 限制同一 IP 并发连接数 |
| 请求限制 | limit_req | 限制请求频率(rate + burst) |
相关页面
- Nginx 概念页 — Nginx 核心能力、location 匹配、root vs alias
- CDN — CDN 加速原理(方案一关联)
- Haproxy 与 IP 透传 — 七层负载均衡对比
- 负载均衡层入门 — 四层与七层概念