如何将自定义头从NGINX反向代理传递到服务器中的SockJs-websocket连接?

如何将自定义头从NGINX反向代理传递到服务器中的SockJs-websocket连接?,websocket,nginx-reverse-proxy,Websocket,Nginx Reverse Proxy,我使用NGINX作为反向代理。以下是nginx.conf文件中的设置。我想将一个自定义头从代理传递到后端HTTP服务器。我确实在HTTP服务器中获得了自定义头,但在我的sockJs连接中没有 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-RealIPRemote $realip_remote_addr; proxy_set_header X-RemoteAddr $remote_addr; prox

我使用NGINX作为反向代理。以下是nginx.conf文件中的设置。我想将一个自定义头从代理传递到后端HTTP服务器。我确实在HTTP服务器中获得了自定义头,但在我的sockJs连接中没有

   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-RealIPRemote $realip_remote_addr;
   proxy_set_header X-RemoteAddr $remote_addr;
   proxy_set_header Host $host;
   proxy_set_header mycustomhdr customname;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_pass http://192.168.1.1:18000;

   # WebSocket support
   proxy_http_version 1.1;
   proxy_set_header mycustomhdr customname;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";
在连接代理到的http服务器中:

sockServer = sockJs.createServer(
... 
 sockServer.on('connection', function (conn) {
      console.log("conn.headers")
      console.log(conn.headers)
以下是我得到的:

{ 'x-forwarded-for': '192.168.1.222',
        'x-real-ip': '192.168.1.222',
               host: 'example.com',
       'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36',
  'accept-language': 'en-GB,en-US;q=0.9,en;q=0.8' }
我没有得到自定义标题mycustomhdr


是的,你不会的。您会注意到其他几个标题也丢失了。并非所有的标题都是公开的

发件人:

头(对象)散列,包含从上一个复制的各种头 正在接收该连接的请求。公开的标题包括:
origin
referer
x-forwarded-for
(和朋友)。我们明确地 不要授予对
cookie
头的访问权限,因为使用它可能容易导致 安全问题(有关详细信息,请参阅“授权”一节)


我绕过去了!我将x-forwarded-for设置为需要nginx传递的自定义头。我没有使用x-forwarded-for,真正的值。也许我应该使用referer。。这无关紧要,但应用程序服务器不使用所有公开的头文件,因此其中一个头文件可能会被使用(或滥用!)。你预见到任何问题或副作用吗?ThanksNice hack@minik现在我认为一个更好的方法是利用这个标题,这样两个值都可用。毕竟,应用服务器知道了黑客攻击,并将头解释为实际上包含两个值!