我想知道如何在 Windows 10、Windows Server 2012 和更新版本上部署我的 node.js 应用程序(它使用 Koa )。

在 Internet 上,我看到了使用 iisnode 的旧技巧,但同时我看到人们担心开发人员对许多重要问题(与 iisnode 相关)没有答案,并且很长时间没有对 iisnode 代码源进行更改。 :(

在 Windows 10 和 Windows Server 2012 及更高版本上托管 node.js 应用程序的现代方法是什么?

我将不胜感激链接到分步文章。

最佳答案

有几种方法可以在 Windows 上为生产工作负载运行 NodeJS。

首先要了解 Windows 内置(内核模式!)支持称为 HTTP.sys 的 HTTP 服务器,IIS 和其他 Web 服务器使用它来提供 HTTP 流量,而不是简单地打开端口 80 上的监听套接字(这就是 Microsoft 的 IIS在 1990 年代后期的 Web 服务器基准测试中击败了 Apache)。

您的选择是:

  • 将 NodeJS 直接暴露给端口 80/443
  • 这是最简单的方法,但有很多缺点。但是如果您不需要在服务器上运行不同的多个应用程序和非 NodeJS 代码,那么这是一个有效的选择。请记住首先禁用 HTTP.sys
  • HTTP.sys 后面运行 NodeJS
  • iisnode 库的作者还为 NodeJS 编写了另一个名为 httpsys 的库(因为在 IIS 后面运行使用了许多与在 HTTP.sys 后面运行相同的技术): https://github.com/tjanczuk/httpsys - 不幸的是它已经过时了,但确实没有太多代码所以你可能可以自己破解它以使用最新版本的 Node.js。这是开源的要点之一! (“不要提示,解决它!”)
  • 使用 Microsoft 的 iisnode 分支在 IIS 后面运行 NodeJS:
  • 虽然最初的 iisnode 被放弃了,但微软实际上接管了所有权并将其 fork 给了 https://github.com/Azure/iisnode,它似乎确实得到了积极维护 - 微软在维护它方面有既得利益,因为微软想从世界上在 Azure 上运行其应用程序赚钱,无论如何他们使用的任何语言、平台或操作系统。
  • 在 Windows 的 nginx 端口后面运行 NodeJS
  • 不推荐在 Windows 上使用,因为它自己的作者说它的性能很差:http://nginx.org/en/docs/windows.html
  • 最后一个选择(可能是最适合您的情况)是在 Windows 上按原样运行 NodeJS 并使用 IIS 的应用程序请求路由 (ARR) 功能:
  • ARR 使 IIS 能够充当(复杂的)反向代理(与 Linux 上的 nginx 是轻量级反向代理相反)。请参阅此处:https://www.iis.net/downloads/microsoft/application-request-routing 以及此处的分步说明:https://dev.to/petereysermans/hosting-a-node-js-application-on-windows-with-iis-as-reverse-proxy-397b
  • 关于node.js - 在 Windows 10 和 Windows Server 2012 及更新版本上托管 `node.js` 应用程序的现代方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57352538/

    10-16 00:06