如果你有一台安装了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”)。