nodejs基于域的路由

时间:2011-08-09 15:52:20

标签: node.js

我的服务器有单个IP地址。我有3个nodejs服务。每项服务都有自己的域名。 F.E.

  • a.company.com,
  • b.company.com,
  • c.company.com

他们由不同的人编写,因此整合到单个应用程序中存在问题。 我的目标是根据GET / POST请求中提到的主机名,使nodejs将不同请求路由到这些不同的服务。 我知道我可以使用NGINX进行这种路由,但我确信它会减慢整个解决方案。我仍然计划保持2K Req / s的速度。所以我更喜欢留在nodejs的漂亮异步世界。

有任何建议吗?

由于

3 个答案:

答案 0 :(得分:3)

如果您使用的是连接,那么就是connect.vhost中间件。回购邮件本身有an example of using connect.vhost for subdomains。该示例可以仅通过更改主机名来适应使用不同的域(例如,它可能是foo.combar.com,就像在此帖子的第一个链接中的示例一样。)

如果您希望您的域位于不同的进程中,我建议您使用node-http-proxy。或者,您可以使用dnode在进程之间分配一些工作,但仍然有一个进程处理所有HTTP。移动可能占用大量内存或在单独进程中崩溃的东西是个好主意,因此它们不会使整个服务器崩溃。

答案 1 :(得分:1)

我正在使用nodejs TCP-proxy来执行此操作。所有解释都在代码中。

var net = require('net');

// your hosts
var dns = {
  'localhost' : 8000,
  'b.host' : 3000,
  'a.host' : 3001
};

// Create TCP-server
var server = net.createServer( function(soc){ // soc is socket generated by net.Server

  // Incoming request processing
  soc.on('data', function(data){


    // Create new socket
    var client = net.Socket();

    // Get host from HTTP headers
    var re = /[^\n]+(\r\n|\r|\n)host:\w*([^:]+)/i;
    var host = data.toString('utf-8').match(re);

    if (! dns[host])
    {
      soc.end('HTTP/1.1 404 Host not found');
      return;
    }

    // Connect to Node.js application
    client.connect(dns[host]);

    // Pause soc for inner socket connection
    soc.pause();

    client.on('connect', function()
    {
      // Write request to your node.js application
      client.write(data.toString('utf-8'));
    });

    client.on('data', function(cdata)
    {
      // Return socket to live
      soc.resume();

      // Write client data to browser
      soc.write(cdata.toString('utf-8'));
      soc.pipe(soc);
      soc.end();
    });

    client.on('end', function(){
      client.destroy();
    });
  });
}
);

server.on('error', function (err){
  // Error processing i just pass whole object
  console.log(err);
});

server.listen(8088);
console.log('Server is listening %d\n', 8088);

答案 2 :(得分:1)

使用nginx或node-http-proxy

http://blog.nodejitsu.com/http-proxy-middlewares http://blog.nodejitsu.com/http-proxy-intro