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:返回状态码或重定向,整体结束
  • rewriterewrite regex replacement [flag] 执行 URL 改写

运行逻辑:请求到达 → 执行 server 块重写规则 → 若重写为完整 URL 则直接跳转 → 否则进入 loop 循环(最多 10 次)→ 执行 location 块重写规则 → 匹配到新 location 则继续 → 结束。

rewrite 四种 flagbreak(终止循环)、last(重新 location 匹配)、redirect(302 临时重定向)、permanent(301 永久重定向)。

rewrite vs return:rewrite 支持正则、功能更灵活但稍慢;return 更快、适合简单跳转。生产场景中简单的域名跳转优先用 return

其他常用模块

模块指令功能
目录索引autoindex on;自动生成目录列表
访问控制allow / deny基于 IP 的访问限制
访问认证auth_basicHTTP 基本认证 + .htpasswd
状态监控stub_status on;查看 Nginx 连接状态
连接限制limit_conn限制同一 IP 并发连接数
请求限制limit_req限制请求频率(rate + burst)

相关页面