在Windows服务器(IIS)上托管Node.js。

15

一个月前我开始学习服务器端编程,我用 'express' 框架和 mssql 构建了一个 nodejs 项目和 web 服务,其中包含一个 "main.js" 文件和一个 "node_modules" 文件夹。

我想在 IIS 上托管这个项目,但是我不知道该如何操作,也没有相关的经验。

我需要对我的项目进行某种打包吗?

我能否在 IIS 上托管 nodejs 项目?如果可以,那么我需要执行哪些步骤呢?我有一个运行着 mysql 的 Windows 服务器。


请查看:https://weblogs.asp.net/owscott/creating-a-reverse-proxy-with-url-rewrite-for-iis - Brahma Dev
3个回答

44

这里是一步一步的说明...

  1. 如果尚未安装,请安装nodeiisnodeurlrewrite
  2. 在IIS中添加一个网站 enter image description here
  3. 编辑hosts文件 enter image description here
  4. 将您的网站URL添加到host文件中 enter image description here
  5. 检查新网站模块以确保已安装iisnode enter image description here
  6. 如果出现,则表示配置成功 enter image description here
  7. 创建node应用程序的JS代码文件 enter image description here
  8. 将此代码放入文件中
var express = require("express");
var app = express();
app.get("/", function(req, res) {
  res.send("Hello Worlxxxxd!");
});
// This is REQUIRED for IISNODE to work
app.listen(process.env.PORT, () => {
  console.log("listening");
});
在目录中添加一个 web.config 文件,并在其中放置以下代码。
<configuration> 
    <system.webServer>
  
     <handlers>
       <add name="iisnode" path="node_app.js" verb="*" modules="iisnode" />
     </handlers>
  
     <rewrite>
       <rules>
         <rule name="nodejs">
           <match url="(.*)" />
           <conditions>
             <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
           </conditions>
           <action type="Rewrite" url="/node_app.js" />
         </rule>
       </rules>
     </rewrite>
  
     <security>
       <requestFiltering>
         <hiddenSegments>
           <add segment="node_modules" />
           <add segment="iisnode" />
         </hiddenSegments>
       </requestFiltering>
     </security>
     </system.webServer> 
 </configuration>
  1. 在浏览器中导航到新网站,由于您尚未安装Express包,因此您应该会收到此错误:enter image description here

  2. 打开命令提示符并安装Express:enter image description here

  3. 刷新网页就可以了:enter image description here


不错。然而,我卡在了10处。无法进行调试。 - Monster Brain
感谢您提供带有截图的完美指南。不仅学会了如何在IIS中部署节点,还顺利地设置了自定义主机名。 - sapatelbaps
一个提示:从Node官网下载Node,而不要使用这个热链接。我最终在64位服务器上安装了x86版本,结果无法运行! - Fiach Reid
"<handlers>"部分出现错误,提示"This configuration section cannot be used at this path."。有什么最安全的解决方法吗? - Salman A
对于后来的任何人,我在第11步卡住了。ChatGPT通过这句话帮助我解决了问题:“在命令提示符中导航到应用程序的根目录,并再次运行安装命令”。原来,“npm install express --save”这一行代码必须在打开到新网站文件夹根目录的命令提示符中执行,因为它会将该站点的nodejs钩子安装到该文件夹中。 - Jereme
这个解决方案也适用于Windows Server 2022吗? - undefined

4

我来晚了,你可能已经解决了这个问题或者采用了不同的方法。

你可以使用iisnode在IIS中运行Node应用程序。

我个人在安装iisnode方面遇到了一些困难,但是它肯定是可行的。


2

我建议使用URL重写(https://www.iis.net/downloads/microsoft/url-rewrite)和应用程序请求路由(https://www.iis.net/downloads/microsoft/application-request-routing)IIS模块。在托管IIS的服务器上安装这些模块。

在IIS中创建一个应用程序,指向您的Node应用程序运行的目录(尽管实际上不使用此路径!): 添加IIS应用程序

在这个新的应用程序中,使用反向代理模板创建一个重写规则,并指向您本地提供的Node.js应用程序: 添加重写规则

现在,您可以通过配置的IIS应用程序浏览到托管在IIS上的站点,并显示您的Node.js托管站点:

View node.js app in IIS

这种方法的主要好处之一是,发给IIS的SSL证书可以与“http”托管的node.js应用程序一起使用。

Browsing to https URL

我已经在命令行中运行了node.js,但如果需要的话,这也可以作为一个服务来完成。


要“作为服务”运行,可以使用任务计划程序。我建议使用一个批处理文件来设置环境变量,然后调用节点。 - Shiraz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接