全链路追踪 id(如 x-trace-id)需在 nginx 的 location 块中通过 proxy_set_header 注入,例如 proxy_set_header x-trace-id $request_id;,该头会随轮询转发至选中的后端节点,轮询算法本身不参与头注入;同时应优先复用上游传递的 id(如 $http_x_trace_id),避免覆盖,并确保 x-real-ip、x-forwarded-for 等关键头一并透传。

轮询本身不处理请求头注入,全链路追踪 ID(如 X-Request-ID、trace-id)需要在代理转发阶段手动添加,与轮询算法无关。只要配置了 proxy_pass,就能在请求发往后端前统一注入。
如何在轮询中注入全链路追踪 ID
在 location 块里用 proxy_set_header 添加自定义请求头即可。Nginx 会把该头原样传给轮询选中的后端节点:
- 若未启用
underscores_in_headers on,避免使用下划线,推荐用短横线命名,例如X-Trace-ID - 可固定值注入:
proxy_set_header X-Trace-ID "abc123"; - 更常用的是由 Nginx 自动生成 UUID:
proxy_set_header X-Trace-ID $request_id;(需确保http块已加载ngx_http_core_module,默认自带) - 也可结合时间戳 + 随机数构造:
proxy_set_header X-Trace-ID "$time_iso8601-$pid-$connection";
轮询配置本身不需要改动
轮询只决定请求发给哪台后端,不干预请求内容。你只需保持标准 upstream 写法:
upstream backend { server 192.168.1.10; server 192.168.1.11; }- 不用加
round_robin,也不用写权重(除非业务需要) - 确保
proxy_pass http://backend;指向该组即可
注意 header 传递的完整性
除了注入新头,还要确认关键上下文头不被丢弃:
- 保留原始客户端 IP:
proxy_set_header X-Real-IP $remote_addr; - 透传原始 Host:
proxy_set_header Host $host; - 如果后端依赖
X-Forwarded-For做日志或限流,也应补上:proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - 若上游已带
X-Trace-ID(比如来自 API 网关),建议优先复用:proxy_set_header X-Trace-ID $http_x_trace_id;,避免覆盖
验证是否生效
用 curl -v 或后端 access log 查看实际收到的请求头:
- 发起请求:
curl -H "X-Trace-ID: my-test-001" http://your-nginx/ - 检查后端日志中是否出现
X-Trace-ID字段,以及值是否为预期(生成的、复用的或固定的) - 连续发 6 次请求,观察 trace ID 是否每次不同(若用
$request_id),同时后端 IP 是否按轮询顺序切换











