iis托管nodejs站点以及iisnode的详细配置

如果你有一台安装了windows server的服务器,并且使用了iis来作为web服务器,而此时此刻你正在为如何用iis来托管你的nodejs网站发愁,那么这篇教程就是为你量身定制了。把nodejs站点部署到iis上其实是非常简单的,关键是部署后的配置可能会稍微繁琐一点。

一、在iis上部署nodejs站点

首先,你需要到node官网下载node程序并安装之,安装步骤比较简单,基本就是一路点击下一步直至完成,这里不再赘述。

其次,需要安装iis的urlrewrite模块,下载地址在这里:https://www.iis.net/downloads/microsoft/url-rewrite。

最后,安装iisnode模块,下载地址:https://github.com/Azure/iisnode/releases,选择合适的版本下载安装。

前面的环境搭建好之后,就可以在iis上添加你的nodejs网站了。

二、iisnode的配置详解

你需要在网站根目录下新建web.config文件并进行配置,详细的配置及说面如下:

<configuration>

  <system.webServer>

    <!-- 标示koajs/app.js是一个要被iisnode模块处理的nodejs应用 -->
    <handlers>
      <add name="iisnode" path="koajs/app.js" verb="*" modules="iisnode" />
    </handlers>

    <!-- 将match节点(如果没有则匹配所有的url)匹配到的url交给koajs/app.js处理,例如:
         http://localhost/hello/foo
         http://localhost/hello/bar         
     -->
    <rewrite>
      <rules>
        <rule name="app">
          <!-- <match url="hello/*" /> -->
          <action type="Rewrite" url="koajs/app.js" />
        </rule>
      </rules>
    </rewrite>

    <!-- 排除node_modules文件夹及其子文件夹 -->
    <security>
      <requestFiltering>
        <hiddenSegments>
          <add segment="node_modules" />
        </hiddenSegments>
      </requestFiltering>
    </security>

    <!-- 返回自定义错误:https://github.com/tjanczuk/iisnode/issues/476 -->
    <httpErrors existingResponse="PassThrough" />

    <!-- node_env - 设置process.evn.NODE_ENV (production, development, staging, ...)
    enableXFF - 配置iisnode添加或修改携带远程主机的ip地址的X-Forwarded-For请求头 -->
    <iisnode node_env="production" enableXFF="true" />

  </system.webServer>
</configuration>

另外,如果你使用的是koa框架,并且部署在iis上,你想通过ctx.ip获取ip地址,那么你需要设置app.proxy = true,具体设置代码如下

const Koa = require('koa');
const app = new Koa();
app.proxy = true;
......

还有一种方法是,自己直接通过“X-Forwarded-For”请求头获取ip地址:ctx.get(“X-Forwarded-For”)。

发表评论