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

Posted

技术标签:

【中文标题】如何配置 nginx 以将 websocket 转发到不同的进程【英文标题】:How to configure nginx to forward websockets to a different process 【发布时间】:2017-04-14 20:19:43 【问题描述】:

我在端口 3000 上有一个节点 express 服务器提供的 REST API。使用 socket.io,还有一个 websocket 连接到同一端口上的 express 服务器。

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

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

【问题讨论】:

你试过了吗:nginx.com/blog/websocket-nginx @ErkiA 如何指定转发 websockets 的端口与转发常规 http 请求的端口? 【参考方案1】:

您只需配置一个位置指令来代理您的 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";

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

【讨论】:

以上是关于如何配置 nginx 以将 websocket 转发到不同的进程的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 uwsgi + nginx + Django + websocket?

如何在 nginx nodejs 服务器上配置“ws”websocket?

WS转WSS协议

Nginx:WebSocket 通配符位置

如何使用 nginx 设置安全的 websocket

用于 SSL PHP 站点和 Websockets WSS 的 Nginx 配置?