node.js :: hostname在`listen`函数中做了什么?

时间:2010-07-03 22:41:48

标签: node.js

我拥有两个域名,abc.com和xyz.com(不是我拥有的真实域名,但它们就是一个例子)。它们都指向相同的IP地址。以下是我的服务器js文件:

var sys=require('sys'),
  http=require('http'),
  settings=require('./settings');



var srv = http.createServer(function(req, res) {
    var body="<b>Hello World!</b>"
    res.writeHead(200, {
        'content-length': body.length,
          'content-type': 'text/html',
          'stream': 'keep-alive',
          'accept': '*/*'
          }
      );
    res.end(body);
  });

srv.listen(8000, 'abc.com' ); // (settings.port, settings.hostname);

然后我访问了http://abc.com:8000/http://xyz.com:8000/,他们都显示了网页。我以为我只能在abc.com上看到这个页面,因为那是我设置的主机名。

但是,当我将'127.0.0.1'作为主机名时,我只能通过服务器本身的wget查看页面。

那么 主机名参数呢?

1 个答案:

答案 0 :(得分:6)

net.js中定义listen函数的以下代码段是相关的:

// the first argument is the port, the second an IP    
var port = arguments[0];
dns.lookup(arguments[1], function (err, ip, addressType) {
  if (err) {
    self.emit('error', err);
  } else {
    self.type = addressType == 4 ? 'tcp4' : 'tcp6';
    self.fd = socket(self.type);
    bind(self.fd, port, ip);
    self._doListen();
  }
});

所以基本上提供一个url作为hostname参数不允许共享主机。所有node.js都可以帮你解决主机名到ip地址的问题 - 因为在我的情况下,两个域都指向同一个ip,两者都可以工作。

我要做共享主机,我必须找到另一种方式。