Node.js:在IIS中使用DNS绑定端口3000

时间:2015-10-13 14:31:17

标签: node.js iis dns windows-server-2012

我正在使用带有不同ASP应用的IIS 8.5运行Windows Server 2012 R2。现在我开发了一个侦听端口3000的Node.js应用程序。此外,还有一条DNS记录,它指向该服务器。

如何在没有IIS的情况下运行节点应用程序(iisnode不是一个选项)在同一台服务器上运行?它应该仍然在端口3000(或类似)上侦听,但是当用户输入域名并没有端口时,它应该识别它并为节点应用程序提供服务。

使用开发服务器(没有DNS绑定),只需在ip地址末尾写入端口(如10.10.10.10:3000)即可。但是,使用DNS记录,我无法让它工作。 sub.domain.com:3000未显示任何内容,sub.domain.com正在重定向到IIS起始页。我能在这做什么?

1 个答案:

答案 0 :(得分:0)

sub.domain.com:3000应该正常运作。您可能有一些防火墙阻止对此端口的传入外部请求。

当有人键入http://sub.domain.com(没有端口)时,客户端默认将请求发送到端口80(如果使用https://则为443)。如果IIS已经在端口80上侦听,那么你无法做任何事情来使node.js响应这个端口。

您可以做的是设置一个快速反向代理(如NGINX)并将其绑定到端口80.将IIS移动到另一个,如8080.配置NGINX将请求从端口80传递到另一个端口,基于传入请求的域。

配置将是这样的:

server {
    listen 80;

    server_name domain.com;

    location / {
       proxy_set_header X-Real-IP  $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_set_header Host $host;
       proxy_pass http://127.0.0.1:8080;
    }
}

server {
    listen 80;

    server_name sub.domain.com;

    location / {
       proxy_set_header X-Real-IP  $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_set_header Host $host;
       proxy_pass http://127.0.0.1:3000;
    }
}

您也可以将IIS用作反向代理,但正如您所说,您不希望IIS参与请求,因此NGINX将是一个不错的选择。