最近比较喜欢用Node.js做一些简单的应用,一直想要部署到生产环境中,但是手上只有一台windows server 2008服务器,并且已经开启了IIS服务,运行了很多.Net开发的网站,80端口已经被占用了。

起初是想用nginx来作为web服务器监听80端口,将所有web访问转发到对应的IIS和node,但由于已运行的老站点众多,如此配置实在需要大量的精力,于是突发奇想,能不能直接利用IIS来托管node服务呢?进过一番搜索之后发现了iisnode模块,可以很轻松的解决这个问题。下面就把实操步骤分享出来,方便有同样需求的朋友参考。

首先iisnode是一个IIS Module加载到IIS以后,就可以在任意站点中通过Web.config指定某些路径转交给node程序执行,通过参数配置,可以设置启动的node进程个数,以及最大连接数等。并且可以监听站点文件变化,自动重启node服务等功能。

iisnode代码托管在github上,如果不想自己编译,可以直接通过以下链接下载适合自己的版本。

https://github.com/tjanczuk/iisnode/wiki/iisnode-releases

比如我的服务器是windows server 2008 64位系统,选择下载“iisnode for iis 7/8 (x64)”安装程序

只要版本正确,安装过程并没有需要特别注意的,自己根据提示一步一步完成即可。

之后还需要安装一下IIS的URL Rewrite模块(需要利用rewrite功能转发相关的请求交给node服务来执行)

下载地址:http://www.iis.net/downloads/microsoft/url-rewrite

软件全部安装完成之后,在IIS中新建网站,将目录指定到我们的nodejs应用目录即可,最后关键的一步,在目下新建web.config配置文件并写入如下的内容:

<configuration><system.webServer><handlers><add name="iisnode" path="app.js" verb="*" modules="iisnode" resourceType="Unspecified" requireAccess="Script" /></handlers><rewrite><rules><rule name="all"><match url="/*" /><action type="Rewrite" url="app.js" /></rule></rules></rewrite><iisnode promoteServerVars="REMOTE_ADDR" /></system.webServer>
</configuration>

作用是将当前目录的所有请求都利用iisnode模块转发到node服务,并指定了node的执行目录。其中的app.js就是node应用的入口文件(可以按照自己的目录结构进行修改)。

一切就绪,现在打开浏览器访问网站,就可以看到效果了。

如果运行的时候出现如下错误:

500.19
配置错误 不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的(overrideModeDefault="Deny"),或者是通过包含 overrideMode="Deny" 或旧有的 allowOverride="false" 的位置标记明确设置的。

通过cmd运行如下代码即可解决:

%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers

其中的handlers是报错的节点名字。

另外如果是Express的项目,建议把web.config文件改为如下内容

<configuration><system.webServer><handlers><add name="iisnode" path="launch.js" verb="*" modules="iisnode" resourceType="Unspecified" requireAccess="Script" /></handlers><rewrite><rules><rule name="all"><match url="/*" /><action type="Rewrite" url="launch.js" /></rule></rules></rewrite><iisnode promoteServerVars="REMOTE_ADDR" /></system.webServer>
</configuration>

并新建程序入口文件launch.js 代码如下:

#!/usr/bin/env node

require('./bin/www');

如此操作的原因请参考博文:http://heeroluo.net/article/detail/118/suffering-from-iisnode

如果出现如下错误:

The iisnode module is unable to start the node.exe process. Make sure the node.exe executable is available at the location specified in the system.webServer/iisnode/@nodeProcessCommandLine element of web.config. By default node.exe is expected in one of the directories listed in the PATH environment variable

解决方法:在web.config 中的 system.webServer 节点加上以下内容:

<iisnode watchedFiles="*.js;node_modules\*;routes\*.js;views\*.jade"  nodeProcessCommandLine="C:\Program Files\node.exe"/>

nodeProcessCommandLine的值为您node的路径

完整示例:
<configuration><system.webServer><handlers><add name="iisnode" path="launch.js" verb="*" modules="iisnode" resourceType="Unspecified" requireAccess="Script" /></handlers><rewrite><rules><rule name="all"><match url="/*" /><action type="Rewrite" url="launch.js" /></rule></rules></rewrite><iisnode promoteServerVars="REMOTE_ADDR" watchedFiles="*.js;node_modules\*;routes\*.js;views\*.jade"  nodeProcessCommandLine="C:\Program Files\node.exe"/>   </system.webServer> </configuration>

转载于:https://www.cnblogs.com/aieceo/p/7906640.html

利用iisnode模块,让你的Node.js应用跑在Windows系统IIS中相关推荐

  1. 【nodejs原理源码赏析(4)】深度剖析cluster模块源码与node.js多进程(上)

    [摘要] 集群管理模块cluster浅析 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 概述 cluster模块是node.js中用于实现和管理 ...

  2. 【nodejs原理源码赏析(4)】深度剖析cluster模块源码与node.js多线程(上)

    [摘要] 集群管理模块cluster浅析 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 概述 cluster模块是node.js中用于实现和管理 ...

  3. node.js 模块_如何创建Node JS可重用模块

    node.js 模块 In my previous post, we have discussed about "How to export and import a Node JS Mod ...

  4. 基于Vue.js和Node.js的个人网盘系统——科技立项中期成果

    基于Vue.js和Node.js的个人网盘系统 个人网盘系统前端使用Vue.js框架,特别使用了Vue3支持的Element Plus组件库.后端使用Node.js提供服务.数据库使用MongoDB. ...

  5. Node.JS项目实战网盘系统-李游Leo-专题视频课程

    Node.JS项目实战网盘系统-110人已学习 课程介绍         Node.JS是一套使用JavaScript语言的后台.它执行Javascript的速度非常快,性能非常好.是近几年来火的公司 ...

  6. Node.js安装教程(Windows)

    Node.js安装教程(Windows版本) 安装网址:https://nodejs.org/en/download/ 第一步 选择windows installer: 直接点击windows ins ...

  7. 【nodejs原理源码赏析(6)】深度剖析cluster模块源码与node.js多进程(下)

    目录 一. 引言 二.server.listen方法 三.cluster._getServer( )方法 四.跨进程通讯工具方法Utils 五.act:queryServer消息 六.轮询调度Roun ...

  8. 【nodejs原理源码赏析(6)】深度剖析cluster模块源码与node.js多进程

    示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 华为云社区地址:[你要的前端打怪升级指南] 文章 ...

  9. node.js搭建个人博客系统

    node.js+腾讯云搭建个人博客系统 最好要有的预备知识: 前端开发知识 html css JavaScript,尤其重要 nodejs相关知识: 异步编程 回调函数 *阻塞&非阻塞 一.开 ...

  10. Vue Element+Node.js开发企业通用管理后台系统笔记完

    第三四章 Vue进阶 emit和emit 和emit和on 用this.$on来定义一个事件, 并且指定事件的执行对象(函数), 他主要是用来干什么的呢 --事件的定义和消费 使用this.on来定义 ...

最新文章

  1. Daily Scrum 10.27
  2. Appian宣布将Google AI 集成到RPA中
  3. Java 虚拟机总结给面试的你(下)
  4. css搜索框变圆脸角,CSS浮动布局
  5. 高等数学入门教程 — 极限
  6. javascript --- 在linux上部署项目
  7. 程序员面试金典 - 面试题 16.26. 计算器(栈)
  8. canvas 粒子效果 - 手残实践纪录
  9. python人脸识别门禁系统毕设_人脸识别门禁系统 毕业设计 可移植树莓派
  10. SQL SERVER 2012 执行计划走嵌套循环导致性能问题的案例
  11. Ubuntu ADB 环境变量配置
  12. 测试基本理论-看这篇就够了
  13. php验证码汉字显示音节,普通话拼音PHP 标调音节 1403个
  14. JAVA语言程序设计 第十六章 (16.10、16.11、16.12、16.13、16.14、16.15、16.16)
  15. java eml 附件_向EML文件追加附件的Java实现
  16. 克罗内克积(Kronecker product)与笛卡尔乘积(Cartesian product)
  17. 微信小程序(获取标签节点的信息)
  18. Linux 运维常见英文单词
  19. opencv(python)使用knn最近邻算法识别手写数字
  20. toxssin:一款功能强大的XSS漏洞扫描利用和Payload生成工具

热门文章

  1. js简单实现div里面的内容向上平滑滚动。
  2. PHP-Header缓存策略
  3. DeepMind研究科学家:NLP基准测试的现在、过去和未来
  4. 五分钟快速了解EM算法
  5. 【学术分享】写论文必须养成的十大良好写作习惯
  6. 干货 | 科研大牛们怎么读文献?
  7. 正则与pandas处理行数据
  8. nlp基础—4.搜索引擎中关键技术讲解
  9. python基础2-数据及字符串知识学习
  10. GroupBy()方法