一、故障现象
自定义请求头"request_id"丢失
二、问题排查
配置调试环境,接口打印header,依次调用链路各层,发现请求nginx代理时对应Header丢失
示例
curl -H "request_id: 11111111" -H "host: api.example.com" http://127.0.0.1/headers
X-Real-Ip: 10.0.0.2
X-Forwarded-For: 192.168.0.3, 10.0.0.2
X-Forwarded-Host: api.example.com
X-Forwarded-Port: 9080
User-Agent: curl/7.61.1
X-Forwarded-Proto: http
Accept: */*
nignx配置
proxy_set_header request_id $http_request_id;
四、排查
负载均衡器会丢弃它收到的任何空的头信息。带有下划线的头信息也会被丢弃。如果你的上游Web服务器依赖于带有下划线的头信息,那么它们就无法获取到这些头信息,除非你使用underscores_in_headers指令配置你的负载均衡器以使这类头信息可用。
原文
链接
https://www.nginx-cn.net/blog/scaling-web-applications-nginx-part-load-balancing/
五、验证
http {
underscores_in_headers on;
...
}
测试
curl -H "request_id: 11111111" -H "host: api.example.com" http://127.0.0.1/headers
X-Real-Ip: 10.0.0.2
X-Forwarded-For: 192.168.0.3, 10.0.0.2
X-Forwarded-Host: api.example.com
X-Forwarded-Port: 9080
User-Agent: curl/7.61.1
X-Forwarded-Proto: http
Accept: */*
Request_id: 11111111
结论
问题解决