nginx代理出现的请求头中获取不到acc_token问题
1.问题
- 程序开发完成之后,发现页面登录之后,获取不到用户信息。发现时没有获取到token信息。
- 本地程序开发完成,后端服务成功署到服务器。
- 通过云服务器开放对应的端口,使用本地的前端服务,直接连接服务器后端服务,没问题。
- 然后打包前端服务,部署到服务器上,通过nginx转发到后端服务。
- 发现页面登录请求时成功,但是通过登录成功获取的token获取用户信息发现找不到token值。后端打印出来的日志也是null的token.
3.找到问题
发现直连程序没问题,但是通过nginx之后就获取不到token,那么问题肯定出在nginx上。
经过排查,发现Nginx配置文件中的proxy_set_header指令也正确。
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend_server;
}
还是没有获取到token,最后发现token传值是请求头中加的acc_token
的key,这下问题找到了。因为NGINX对header中下划线(_)不支持
。nginx默认request的header的那么中包含’_’时,会自动忽略掉。这下就好处理了。
4.处理问题
方法一:
不支持"_“直接修改请求头的下划线,改成”-"符号,acc_token改成acc-token
方法二
简单粗暴,直接让nginx不忽略下划线:在nginx中的http请求部分,加上
underscores_in_headers on;