我正在使用nginx来代理我的nodejs应用。在我的应用程序中,我总是从标题中询问“client_id”。当我在做本地测试时。一切正常。但是当我通过Nginx推送到服务器和代理时。然后client_id丢失了。我可以看到,当nginx执行代理时,它会删除我的自定义标题“client_id”。
我想问的是:
答案 0 :(得分:2)
谢谢@Peter Lyons,我找到了原因。是的,nginx默认将所有标头传递到目标服务器。但是,默认情况下,nginx会阻止名称中包含下划线“_”的所有标头。
我不知道为什么nginx这样做。但在这个问题中,这个下划线的事情是我无法得到我的标题“client_id”的原因。
有两种解决方法:
1,更改标题名称以避免使用下划线,在此问题中,将“client_id”更改为“clientId”或“client-id”
2,在nginx.conf中,http部分内部,设置underscores_in_headers on;,例如:
http {
....
underscores_in_headers on;
....
}
答案 1 :(得分:0)
默认情况下,nginx的HttpProxyModule启用了proxy_pass_request_headers,因此会将客户端请求标头传递给目标服务器。
我的第一个建议是尝试将标题重命名为“X-Client-Id”,以利用HTTP已为非标准标题(例如您的标题)保留的扩展名称空间,并查看nginx是否会将其转发。如果没有,请查看proxy_set_header指令。
附注:完全使用自定义标头,特别是一个名为“client_id”的标签几乎是一个肯定的迹象,表明您正在重新发明轮子或者不了解使用Cookie和会话的行业标准。除非您确实需要这样做,否则您可能需要退后一步并重新考虑您的潜在问题。