问题描述
最近在统一java和dotnet的链路传递参数命名,对于http使用header作为传递载体。其中一个传递参数(租户id)命名为__tenant,但是在http请求过程中丢失了。
问题排查过程
- 首先怀疑是请求方的问题,通过日志打印。排除请求方代码问题。
- 然后查看服务提供方了。一开始是在本地调试服务,本地启动服务后,使用postman请求,header中的__tenant未丢失。排除服务代码问题。
- 然后怀疑服务的nginx对header参数进行了过滤,查询相关资料后,果然是nginx的问题。
最终问题定位
nginx的配置中,有一个underscores_in_headers参数,表示是否可以使用带下划线的header,默认为false,表示忽略下划线header。
解决方法
- 方法1:修改链路参数命名,不使用下划线。
- 方法2:在nginx中,显示配置underscores_in_headers on
因为涉及到跨系统,修改链路参数不太现实,所以选择了方法2.