用于 websocket 连接的 NGinx 反向代理

用于 websocket 连接的 NGinx 反向代理

我有一个在几台机器上运行的控制台应用程序。我可以通过输入 URL 使用 websocket 客户端访问它ws://192.168.1.152/h264/。我需要能够在外部与这些机器建立连接。我在 Nginx 中尝试了许多选项。我希望能够连接到上面ws://streams.mydomain.com/101的 IP 并让它转到上面的 IP。下面是示例表。

ws://streams.mydomain.com/152/>ws://192.168.1.152

ws://streams.mydomain.com/153/>ws://192.168.1.153

ws://streams.mydomain.com/154/>ws://192.168.1.154

我尝试过各种选择,包括以下内容:

方法 1

http {
    server {
        listen      *;
        server_name streams.mydomain.com;
        location /101/ {
            proxy_pass $scheme://192.168.1.52;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
        }
    }
}

此方法导致“无效响应”(获得 301 并预期 101)

方法 2

http {
    server {
        listen      *;
        server_name streams.mydomain.com;
        location /101/ {
            add_header  'Connection'    'Upgrade';
            add_header  'Upgrade'       websocket;
            return      101             $scheme://192.168.1.52;
        }
    }
}

这会导致“缺少升级标头”。

其他方法

我也尝试过使用该stream指令,但没有成功,并且rewrite在 HTTP 下也取得了不同的成功。


我发了一个关于第二种方法的具体问题,但我希望这个问题能够为那些我尚未找到的方法提供答案。


以下是完整配置的 pastebin:https://pastebin.com/1H49n5LB

相关内容