1. 请求镜像模块 (ngx_http_mirror_module)
概述
- 版本要求:1.13.4+
- 实时流量复制到测试环境
- 不影响原请求响应
核心指令
| 指令 |
说明 |
默认值 |
| mirror |
镜像目标 location |
off |
| mirror_request_body |
是否镜像请求体 |
on |
基础配置示例
server {
location / {
proxy_pass http://production_backend;
mirror /mirror;
}
location = /mirror {
internal;
proxy_pass http://test_backend$request_uri;
}
}
多目标镜像
location / {
proxy_pass http://production;
mirror /mirror_test;
mirror /mirror_staging;
}
条件镜像
map $http_x_mirror $do_mirror {
default "";
"true" "/mirror";
}
server {
location / {
proxy_pass http://production;
mirror $do_mirror;
}
}
应用场景
- 灰度测试验证
- 压力测试(真实流量)
- 安全审计
- A/B 测试对比
最佳实践
- 使用 internal 标记镜像目标
- 设置短超时
proxy_read_timeout 1s
- 大文件上传关闭
mirror_request_body off
2. 大文件分片模块 (ngx_http_slice_module)
概述
- 版本要求:1.9.8+
- 将大文件分割成小块请求
- 支持 Range 请求高效缓存
核心指令
| 指令 |
说明 |
默认值 |
| slice |
分片大小 |
0(禁用) |
内置变量
| 变量 |
说明 |
| $slice_range |
当前分片范围(bytes=0-1048575) |
配置示例
location /videos/ {
slice 1m;
proxy_set_header Range $slice_range;
proxy_cache my_cache;
proxy_cache_key $uri$slice_range;
proxy_cache_valid 200 206 1d;
proxy_pass http://video_backend;
}
工作原理
客户端请求 Range: bytes=0-2M
↓
nginx 分割为:
- Range: bytes=0-1M (分片1)
- Range: bytes=1M-2M (分片2)
↓
每个分片独立缓存
应用场景
- 视频流媒体(边下边播)
- 大文件下载(断点续传)
- CDN 源站
最佳实践
- 视频文件:1-2MB 分片
- 大文件下载:5-10MB 分片
- 必须设置
proxy_set_header Range $slice_range
- 缓存键必须包含
$slice_range
- 缓存 206 状态码
3. 综合配置示例
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=media:10m max_size=10g;
server {
# 生产服务
location /videos/ {
slice 2m;
proxy_set_header Range $slice_range;
proxy_cache media;
proxy_cache_key $uri$slice_range;
proxy_cache_valid 200 206 7d;
proxy_pass http://video_backend;
# 同时镜像到测试环境
mirror /mirror;
}
# 镜像目标
location = /mirror {
internal;
proxy_pass http://test_video_backend$request_uri;
proxy_read_timeout 1s;
}
}