Node.js - 具有 WebSocket 代理和 SSL 支持的良好 WebServer?
Posted
技术标签:
【中文标题】Node.js - 具有 WebSocket 代理和 SSL 支持的良好 WebServer?【英文标题】:Node.js - Good WebServer with WebSocket-proxying & SSL support? 【发布时间】:2011-04-19 13:14:37 【问题描述】:我真的很喜欢 node.js,但是当你想运行多个 websocket 服务器并让它们都可以通过端口 80 访问时,它真的很复杂。
我目前正在运行 nginx,但无法根据 url 将传入的 websocket 连接代理到不同的 websocket 服务器,因为 nginx 不支持 http 1.1。
我尝试实现一个具有我自己的功能的网络服务器,但是在标头传递等方面确实很复杂。另一件事是 SSL 支持。支持它并不容易。
那么,有没有人知道一个很好的解决方案来做我提到的事情?
感谢您的帮助!
【问题讨论】:
【参考方案1】:我使用 nodejitsu 的node-http-proxy 取得了不错的成绩。正如他们的自述文件中所述,他们似乎支持 WebSockets。
WebSocket 示例(取自他们的 GitHub 自述文件):
var http = require('http'),
httpProxy = require('http-proxy');
//
// Create an instance of node-http-proxy
//
var proxy = new httpProxy.HttpProxy();
var server = http.createServer(function (req, res)
//
// Proxy normal HTTP requests
//
proxy.proxyRequest(req, res,
host: 'localhost',
port: 8000
)
);
server.on('upgrade', function(req, socket, head)
//
// Proxy websocket requests too
//
proxy.proxyWebSocketRequest(req, socket, head,
host: 'localhost',
port: 8000
);
);
它的生产使用应该没问题,因为它用于nodejitsu.com。要将代理应用程序作为守护程序运行,请考虑使用forever。
【讨论】:
【参考方案2】:较新版本的 nginx 实际上将支持 http/1.1 的反向代理。您可能需要 1.1.7 或更高版本。
在你的配置中尝试这样的事情:
location /
chunked_transfer_encoding off;
proxy_http_version 1.1;
proxy_pass http://localhost:9001;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host:9001; #probaby need to change this
proxy_set_header Connection "Upgrade";
proxy_set_header Upgrade websocket;
这样做的好处是您可以在 nginx 终止 SSL。
【讨论】:
以上是关于Node.js - 具有 WebSocket 代理和 SSL 支持的良好 WebServer?的主要内容,如果未能解决你的问题,请参考以下文章
使用来自 certbot 的 ssl 将 websocket nginx 代理设置为 node.js
第1882期基于Unix Socket的可靠Node.js HTTP代理实现(支持WebSocket协议)
如何解决Vue.js里面noVNC的截图问题——蛋疼的cookies验证和node.js的websocket代理
使用带有弹性 beanstalk、nginx 和 node.js 的 websocket 出现问题