1

我正在使用 nginx 代理我的 nodejs 应用程序。在我的应用程序中,我总是从标题中询问“client_id”。当我在做本地测试时。一切正常。但是当我通过 Nginx 推送到服务器和代理时。然后client_id丢失了。我可以看到,当 nginx 做代理时,它会删除我的自定义标头“client_id”。

我想问的是:

  1. 有没有办法确保 nginx 可以将我的 client_id 传递给 nodejs?
  2. 有没有办法让 nginx 通过任何自定义标头?
4

2 回答 2

4

谢谢@Peter Lyons,我刚刚找到了原因。是的,nginx 确实将所有标头默认传递给目标服务器。但是,默认情况下,nginx 会阻止名称包含下划线“_”的所有标头。

我不知道为什么 nginx 会这样做。但是在这个问题中,这个下划线是我无法获得标题“client_id”的原因。

有2种方法可以解决:

1、更改表头名称避免下划线,在本题中,将“client_id”改为“clientId”或“client-id”

2、在nginx.conf中,在http部分里面,设置underscores_in_headers on;,例如:

http {
    ....

    underscores_in_headers on;

    ....
}
于 2013-08-13T05:01:26.293 回答
0

默认情况下,nginx 的 HttpProxyModule 启用了proxy_pass_request_headers,因此会将客户端请求标头传递给目标服务器。

我的第一个建议是尝试将您的标头重命名为“X-Client-Id”,以利用 HTTP 为非标准标头(例如您的标头)保留的扩展名称空间,并查看 nginx 是否会转发它。如果没有,请查看proxy_set_header指令。

旁注:完全使用自定义标头,特别是称为“client_id”的标头几乎肯定表明您正在重新发明轮子或不了解使用 cookie 和会话的行业标准。除非你真的确定你需要这个,否则你可能想退后一步,重新考虑你的潜在问题。

于 2013-08-12T02:36:21.657 回答