我拥有两个域名,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查看页面。
那么 主机名参数呢?
答案 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,两者都可以工作。
我要做共享主机,我必须找到另一种方式。