如何在同一台服务器上运行多个实例?

时间:2015-08-06 07:46:01

标签: node.js express proxy sails.js

我想在同一台服务器上运行两个Sails.js API实例。我只有一个域名,并希望:

如何使用Sails / Express / Node.js?是否有任何模块可以处理这类问题?或者我需要像Apache或Nginx这样的代理服务器吗?

1 个答案:

答案 0 :(得分:3)

您可以使用node-http-proxy

例如,您在端口8080中有sails服务器1,并将服务器2应用到端口8081。 现在使用端口80上的http-proxy,您可以将/1.0/重定向到服务器1,将v1.1重定向到服务器2.

以下是您可以使用(未​​经测试)的http-proxy示例:

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

proxy.on("error", function(err){console.log(err);});//Prevent proxy crash by socket hang out error

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

    switch (hostname+req.url)
    {
        case 'api.example.com/1.0':
            proxy.web(req, res, {target : 'http://localhost:8080'});
            break;
        case 'api.example.com/1.1':
            proxy.web(req, res, {target : 'http://localhost:8081'});
            break;
        default:
            proxy.web(req, res, {target : 'http://localhost:8080'});
    }
});

//
// Listen to the `upgrade` event and proxy the
// WebSocket requests as well.
//
proxyServer.on('upgrade', function (req, socket, head)
{
    var hostname = req.headers.host.split(":")[0]; 

    switch (hostname+req.url)
    {
        case 'api.example.com/1.0':
            proxy.ws(req, socket, {target : 'ws://localhost:8080'});
            break;
        case 'api.example.com/1.1':
            proxy.ws(req, socket, {target : 'ws://localhost:8081'});
            break;
        default:
            proxy.ws(req, socket, {target : 'ws://localhost:8080'});
    }
});
proxyServer.listen(80, function ()
{
    console.log('proxy listening on port 80');
});

你可以对Apache或Nginx做同样的事情,但是你要求完整的节点解决方案:)