因此,我修复了最后一个关于“映射”端口到子文件夹的“反向代理”问题,再次感谢这个出色的社区。
我已经能够使用此解决方案一段时间了,但现在我面临一个新问题。情况是:
有一个网页设置(使用 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;