如何配置 nginx 将 websockets 转发到不同的进程

Dan*_*maa 3 nginx websocket node.js

我有一个由 Node Express 服务器在端口 3000 提供服务的 REST API。使用 socket.io,在同一端口上还有一个 Websocket 连接到 Express 服务器。

为了扩展我们的节点服务器,我们决定将 websocket 服务器拆分为一个全新的进程,并将其托管在新端口 (3002)

如何配置 nginx 将所有 websocket 消息转发到端口 3002 上的新进程,同时将其他所有内容转发到端口 3000 上的原始 REST API 服务器?

Ren*_*han 6

您只需配置一个位置指令来代理您的 websocket 服务器

location /websocket/ {

    proxy_pass http://127.0.0.1:3002;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}
Run Code Online (Sandbox Code Playgroud)

如果您的连接客户端是纯 websocket 客户端,那么您可能需要将 websocket 连接 url 设置为ws://example.com/websocket/socket.io/?EIO=3&transport=websocket