【问题标题】:Node.js: bind port 3000 with DNS in IISNode.js:在 IIS 中将端口 3000 与 DNS 绑定
【发布时间】:2016-01-11 08:43:15
【问题描述】:

我正在运行带有 IIS 8.5 和不同 ASP 应用程序的 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 起始页。我可以在这里做什么?

【问题讨论】:

  • 您需要一个反向代理来获取 sub.domain.com(无端口)指向节点应用程序。 (iis 可以处理)一次只能有一个应用程序监听任何特定端口。

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


【解决方案1】:

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 将是一个不错的选择。

【讨论】:

  • 感谢您的详细回答。反向代理似乎是这种情况下的关键词。我不涉及 IIS 的意思是部分正确的。我绝不会使用 iisnode,因为这对我来说效果不佳。使用 IIS 作为反向代理似乎更像是一种选择。我要试试这个。
  • 好的,多亏了这些说明,我设法让 IIS 作为反向代理工作。现在一切都很好,再次感谢! myconnectionserver.com/support/tutorials/v90/iisProxy/…
猜你喜欢
  • 2016-06-21
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-28
相关资源
最近更新 更多