nginx proxy_pass 将两个端口放入子文件夹中

nginx proxy_pass 将两个端口放入子文件夹中

因此,我修复了最后一个关于“映射”端口到子文件夹的“反向代理”问题,再次感谢这个出色的社区。

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

有一个网页设置(使用 nginx),网址为http://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。这个工作正常。但是,其他 websocket 有不同的端口,例如 8159。我已将相应的 proxy_pass 添加到 nginx 配置中:

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 来解决这个问题?

非常感谢!

帕特里克

答案1

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

       位置/服务器1 {
               代理通过 http://server1:8081/;
               代理缓冲关闭;
       }
       位置/服务器2 {
               代理通过 http://server2:8082/;
               代理缓冲关闭;
       }

就你的情况而言,这将转化为:

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

相关内容