node.js - 在 Node http-proxy 后面 sails

标签 node.js socket.io sails.js http-proxy node-http-proxy

我正在尝试将多个 sails 服务器放在同一台服务器上,为此我想放置一个 Node http-proxy,将每个域重定向到正确的服务器上,如下所示:

var http = require('http'),
    httpProxy = require('http-proxy'), 
    proxy = httpProxy.createProxyServer({}), 
    url = require('url'); 

http.createServer(function(req, res) 
{ 
    var hostname = req.headers.host.split(":")[0]; 
    var pathname = url.parse(req.url).pathname; 

    switch(hostname) 
    { 
        case 'example.com': 
            proxy.web(req, res, { target: 'http://localhost:8080' }); 
            break; 
        case 'dev.example.com': 
            proxy.web(req, res, { target: 'http://localhost:8081' }); 
            break; 
        default: 
            proxy.web(req, res, { target: 'http://localhost:80' }); 
    } 
}).listen(80, function() { 
    console.log('proxy listening on port 80'); 
});

但是在调用新页面后,我遇到此错误并且代理崩溃:

/var/www/default/node_modules/http-proxy/lib/http-proxy/index.js:119
    throw err; 
          ^ 
Error: socket hang up 
    at createHangUpError (_http_client.js:215:15) 
    at Socket.socketCloseListener (_http_client.js:247:23) 
    at Socket.emit (events.js:129:20)
    at TCP.close (net.js:485:12)

我想我错过了一些转发套接字的代码,但我该怎么做呢?这种代理对于生产来说足够强大吗?

最佳答案

您仅处理 http 请求的代理,您还应该处理 socket 请求。

这是一个小技巧,您可以在应用程序中添加逻辑。

proxyServer.on('upgrade', function (req, socket, head) {

    console.log(req)
    proxy.ws(req, socket, head);
});

关于node.js - 在 Node http-proxy 后面 sails ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31797501/

相关文章:

node.js - Socket.IO 消息传递到多个房间

mysql - Hook (`orm` ) 加载失败!风 sails

node.js - 在 sailsJS 中返回变量值

docker - 如何通过 localhost 连接两个 docker 容器?

node.js - 是否可以从 App Store Connect API 获取安装和崩溃数据?

javascript - 如何通过 NodeJS 将文件上传到 S3 并在浏览器中跟踪进度?

javascript - 使用 ExpressJS 进行环回

node.js - 无法在 Windows 8.1 64 位上加载 bcrypt

javascript - 偶尔的 ECONNREFUSED 错误

node.js - 通过 Socket.io 连接进行 JWT 授权