nginx proxy_pass将两个端口转换为子文件夹

所以我有我的最后一个“反向代理”问题固定关于“映射”一个端口到子文件夹再次感谢这个真棒社区。

我已经能够使用这个解决scheme了一段时间,但现在我面临一个新的问题。 情况是:

有一个网页设置(使用nginx)与此urlhttp://test.domain.com:8042/view.html 。 我需要各种各样的原因,这个端口变成一个子文件夹,并实现它(帮助),并获得http://test.domain.com/view/view.html

这个proxy_pass是:

 location ~/view(.*)$ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host:$server_port; proxy_pass http://test.domain.com:8042$1; 

这个很棒。 我可以通过http://test.domain.com/view/view.html访问该页面。 这个页面上有几个websocket,其中一个也有8042端口。这个工作正常。 但是,其他websockets有不同的端口,例如8159.我已经添加了一个相应的proxy_pass到nginxconfiguration:

 location ~/cantrace(.*)$ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host:$server_port; proxy_pass http://test.domain.com:8159$1; 

从Javascript这个websocket被称为通过

 my_websocket = new WebSocket('ws://test.domain.com/cantrace/ws'); 

但是这不起作用。 也没有

 my_websocket = new WebSocket('ws://test.domain.com/view/cantrace/ws'); 

但是,工作是什么?

 http://test.domain.com:8042/view.html 

然后加载view.html上的其他websocket

 my_websocket = new WebSocket('ws://test.domain.com/cantrace/ws'); 

这以前没有工作。

所以很显然,带有/ view和/ cantrace的双重proxy_pass在这里是一个问题。 有没有办法解决这个与Nginx?

非常感谢你!

帕特里克

我有这样的设置来访问一个反向代理后面的两个服务器,我相信你的proxy_passs指令缺less一个尾随/ ,这是我的设置:

        location / server1 {
                proxy_pass http:// server1:8081 /;
                proxy_bufferingclosures;
        }
        location / server2 {
                proxy_pass http:// server2:8082 /;
                proxy_bufferingclosures;
        }

在你的情况下,这将转化为:

 proxy_pass http://test.domain.com:8042/$1;