情况如下: 我IIS开着里面有多个网站都是80端口: eg:www.aaaaa.com www.bbbb.com www.cccc.com 注释:非真实域名 现在我想用nodejs监听另外一个域名的80端口,老是失败。 代码如下:
var http=require(‘http’); var url=require(‘url’); function start(){ function onRequest(req,res){ res.writeHead(200,{‘Content-type’:‘text/plain’}); res.write(‘hello world’); res.end(); } var server=http.createServer(onRequest); server.listen(80,‘ccc.com’); console.log(‘Server is started’); } start();
异常信息如下图:
域名识别需要自己写代码实现,没几行所以我就没有拉出来专门折腾,这个是我的一个实现 https://github.com/shy2850/node-server/blob/master/nodeLib/index.js#L27
效果就是实现域名识别了, http://f2e-server.com/server.html#host-conf
一台PC上的同一个端口通常只能提供一种服务,你不可能在IIS或者Apache开启80端口的同时再开启80端口服务,你之所以能看到统一端口的不同服务,就是服务器使用了类似上面的本地域名识别功能。
问题找到了,端口被程序占用,netstat -ano查看到 pid=4的程序占用了80端口。但是又是 system程序,不敢强制停止, 最终百度到方法:停止 SQL Server ReportingServices这个服务,然后 nodejs就能直接通过域名绑定 80端口了。 代码如下:
var http=require(‘http’); var url=require(‘url’); function start(){ function onRequest(req,res){ res.writeHead(200,{‘Content-type’:‘text/plain’}); res.write(‘hello world’); res.end(); } var server=http.createServer(onRequest); server.listen(80,‘cccc.com’); console.log(‘Server is started’); } start();
运行结果是成功,外网也能通过域名直接访问内容了。
谢谢各位的热心帮助,如果有后来着也遇到类似问题,可以加qq 2446681809 交流