要让 server 块仅对 api.example.com 做流量镜像,需在匹配该域名的 server 块中,于指定 location 使用 mirror /mirror-api; 并启用 mirror_request_body on;、限制 mirror_rate_limit;用 internal 声明 /mirror-api 路径,proxy_pass 至独立后端并清除敏感头;单独配置日志格式与路径便于分析;最后通过 nginx -t 和 curl 验证主流程不受影响且镜像生效。

要让某个 server 块只对特定域名(如 api.example.com)做流量镜像,核心是把 mirror 指令精准作用于该域名的请求路径,同时避免影响其他域名或干扰主业务逻辑。
在目标 server 块中启用 mirror 指令
确保该 server 块的 server_name 明确匹配你要镜像的域名,然后在需要镜像的 location 中添加 mirror 配置:
- 使用
mirror /mirror-api;将所有匹配请求复制一份到内部路径/mirror-api - 必须配合
mirror_request_body on;,否则 POST/PUT 等带请求体的请求无法完整镜像 - 建议加
mirror_rate_limit 500r/s;防止镜像流量压垮后端(按实际吞吐调整)
定义专用 mirror location 并限制访问
镜像流量需路由到独立后端,且不能被外部直接访问:
- 用
location = /mirror-api { internal; ... }声明内部路径,禁止公网访问 -
proxy_pass http://mirror_api_backend$request_uri;转发镜像请求,保留原始 URI 和查询参数 - 移除敏感头:设置
proxy_set_header Authorization "";和Cookie "";,保障测试环境安全
隔离日志便于分析
为该域名的镜像行为单独记录日志,方便排查和统计:
- 在
server块中定义专属 log_format,例如:log_format api_mirror '$time_iso8601 [API-MIRROR] "$request" $status $body_bytes_sent'; - 在
location /或location = /mirror-api中指定access_log /var/log/nginx/api-mirror.log api_mirror; - 避免与主业务日志混在一起,降低分析成本
验证与注意事项
配置完成后需确认镜像是否生效且不影响主流程:
- 检查 Nginx 配置语法:
nginx -t;重载:nginx -s reload - 用
curl -v http://api.example.com/test观察主服务响应是否正常、延迟是否可控 - 查看
/var/log/nginx/api-mirror.log是否有对应条目,确认镜像请求已发出 - 注意:镜像不改变主请求结果,即使镜像后端返回 5xx,主响应仍由原 upstream 决定










