Node.js nodejs从Nginx获取请求头

Node.js nodejs从Nginx获取请求头,node.js,nginx,Node.js,Nginx,我正在使用nginx代理我的nodejs应用程序。在我的应用程序中,我总是从标题中询问客户id。当我做本地测试的时候。一切正常。但当我通过Nginx推送到服务器和代理时。然后客户id丢失了。我可以看到,当nginx执行代理时,它会删除我的自定义头客户机id 我想问的是: 有没有办法确保nginx可以将我的客户端id传递给nodejs? 有没有一种方法可以让nginx通过定制的头文件? 默认情况下,nginx的HttpProxyModule已启用,因此将把客户端请求头传递给目标服务器 我的第一个建

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

我想问的是:

有没有办法确保nginx可以将我的客户端id传递给nodejs? 有没有一种方法可以让nginx通过定制的头文件?
默认情况下,nginx的HttpProxyModule已启用,因此将把客户端请求头传递给目标服务器

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


旁注:使用自定义标题,特别是一个名为client_id的标题,几乎可以肯定,这表明您正在重新发明轮子,或者不了解使用cookie和会话的行业标准。除非您确实确定需要,否则您可能需要退后一步,重新思考根本问题。

默认情况下,nginx的HttpProxyModule已启用,因此将把客户端请求头传递到目标服务器

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


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

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

我不知道nginx为什么这么做。但在这个问题中,下划线是我无法获取头客户机id的原因

有两种解决方法:

1、更改标题名称以避免下划线,在本问题中,将client_id更改为clientId或client id

2,在nginx.conf中,在http部分内,将上的\u头中的\u设为下划线;,例如:

http {
    ....

    underscores_in_headers on;

    ....
}

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

我不知道nginx为什么这么做。但在这个问题中,下划线是我无法获取头客户机id的原因

有两种解决方法:

1、更改标题名称以避免下划线,在本问题中,将client_id更改为clientId或client id

2,在nginx.conf中,在http部分内,将上的\u头中的\u设为下划线;,例如:

http {
    ....

    underscores_in_headers on;

    ....
}

谢谢:有什么原因吗?谢谢:有什么原因吗?