首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node-http-proxy websocket代理&中间件

node-http-proxy websocket代理&中间件
EN

Stack Overflow用户
提问于 2014-03-14 13:46:22
回答 2查看 4.1K关注 0票数 7

我想反向代理一个使用websockets的现有应用程序,但使用应用程序中间件在应用程序前面实现一个授权层。

node-http-proxy宣传了这两个特性,但我似乎无法将它们组合在一起。

反向代理websockets运行良好:

代码语言:javascript
复制
var httpProxy = require('http-proxy');

httpProxy.createProxyServer({  
  target: 'http://127.0.0.1:8888', // where do we want to proxy to?
  ws    : true // proxy websockets as well 
}).listen(3000);

但是,当我看一下middleware examples时,它们似乎都使用了连接服务器,此时websocket支持似乎消失了。例如:

代码语言:javascript
复制
var httpProxy = require('http-proxy'),
    connect = require('connect');

var proxy = httpProxy.createProxyServer({
  target: 'http://localhost:8888',
  ws: true
});

connect.createServer(
  connect.compress({
    // Pass to connect.compress() the options
    // that you need, just for show the example
    // we use threshold to 1
    threshold: 1
  }),
  function (req, res) {
    proxy.web(req, res);
  }
).listen(3000);

这是一个已知的限制,还是有其他方法可以将websocket反向代理和中间件结合起来?

EN

回答 2

Stack Overflow用户

发布于 2015-09-05 21:22:55

您可以使用http-proxy-middleware作为中间件。它将代理http-request和websockets:

代码语言:javascript
复制
var http            = require('http');
var connect         = require('connect');
var proxyMiddleware = require('http-proxy-middleware');

var proxy = proxyMiddleware('http://localhost:8888', {
                changeOrigin: true,   // for vhosted sites
                ws: true
            });

var app = connect();
app.use(proxy);                       // <- add the proxy to connect

var server = http.createServer(app).listen(3000);

有关更多配置选项,请查看文档:

https://www.npmjs.com/package/http-proxy-middleware

票数 0
EN

Stack Overflow用户

发布于 2015-04-01 06:23:12

您需要从http服务器对upgrade事件调用proxy.ws()

代码语言:javascript
复制
// Listen to the `upgrade` event and proxy the
// WebSocket requests as well.
//
proxyServer.on('upgrade', function (req, socket, head) {
  proxy.ws(req, socket, head);
});

请参阅:https://github.com/nodejitsu/node-http-proxy#proxying-websockets

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22397126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档