让你的 Node.js 跑在 Windows 的 IIS 中

来源:互联网 发布:闲鱼淘宝介入后公平吗 编辑:程序博客网 时间:2024/05/06 18:47

前段时间看到老赵写的《基于Node.js、Express和Jscex开发的ToDo网站示例》一文中提到的Node.js 将 Javascript 运行在服务品上的理念,就想到了一位老 Geek 的一段话(抱歉,原URL已经忘记了)说道他周末回家花了几个小时将 Javascript 试图运行在 PC 机上当日常编程工具来使用,就像 python 那样。

Node.js 确实是个不错的东西,国内也已经有了一大批学习者,最新版是0.5.5 版。关于它的介绍,我就不再重复了,虽然几乎每篇关于 Node.js 的文章都以“Node.js 是什么”来开篇。技术文档可以在这里找到。
我要讲的是在 Windows 和 IIS 中来运行 Node.js。

Node.js 原本是原生于 Linux 平台的东东,不过微软也看出它的好处来,所以主动与 Node.js 团队接触,并给予支持,所以才促成了这桩美事,使得 Windows 平台现在也能运行 Node.js 了,在前不久发行的 0.5.5 版中,已包含了 Windows 的生成版。博客园对来自 nodejs.org官方博客中的此消息进行了翻译报道。

一、在 Windows 中运行 Node.js


官方提供了运行环境之后,在 Windows 中运行 Node.js 变得简单。
通过简单的四步,立即启动你的 Node.js 站点:
1 下载 Windows 版的 Node.js 宿主就行程序 Node.exe,置于任一目录,如  c:\node\node.exe 
2 新建一个 Hello World 示例程序 c:\server.js,其代码如下:

var http = require('http');  http.createServer(function (req, res) {    res.writeHead(200, {'Content-Type': 'text/html'});    res.end('<h1>Cool Nodejs Web Server</h1>');  }).listen(1888, "127.0.0.1");  console.log('Server running at http://127.0.0.1:1888/');

3 通过 Windows 的命令提示符输入提示符输入命令 c:\node\node.exe c:\server.js后回车运行,看到控制台上输出 Server running at http://127.0.0.1:1888/ 字样即表示运行成功了
4 打开任意网页浏览器,输入 http://localhost:1888/ 的网址并访问,就可以看到效果了

通过以上步骤,你就可以在 Windows 上运行 Node.js 了,通过进一步的了解学习,可以构建一个基于 Javascript 的网站了。
按照 Node.js 官方的说法,Windows Server 2003 平台也可以通过此方法来运行 Node.js

二、将 Node.js 集成到 IIS 中


 下面的内容翻译自 Scott 的文章 《Installing and Running node.js applications within IIS on Windows - Are you mad?》,主要讲的是在 Windows  的 IIS 中配置和安装 Node.js,有所删节,同时也加入一些我自己的见解。

最近 Tomasz Janczuk 忙于 iisnode 项目

你也许以为 Windows 与 node 并不应该放在一起提及。“这是错误的!他们怎么看?以为我认为IIS只为 .NET 而生么?” 也许你还记得几年前我在 CodeMash 关于 IIS7 和 PHP 的发言中展示如何用 IIS7 配合 PHP 和 FastCGI 来每秒处理成千上万个请求的。IIS 体系、Windows 体系和 Azure 体系希望使 Windows 可以运行一切。请记住,我们卖的是 Windows,所以如果它能处理更多事工作,当然是好事。
为什么要使 Node 在 IIS 里运行?Tomasz 做了最好的诠释:
 
进程管理(iisnode 模块可以有效地管理 node.exe 进程的生命周期)
多核服务器的可扩展性(突破了 node.exe 单线程限制,因而可通过启动多个进程来均衡 HTTP 流压力)
自动更新 (自动监视源文件,一旦被更改,就回收进程)
通过HTTP来访问日志(通过HTTP的方式来访问由 node.exe 产生的输出)
与其他类型资源共存(iisnode 模块提供了IIS集成并协同解决与其他类型资源的并存,如HTML、PHP、非node程序的普通Javascript等)
对 Nodejs 应用程序尽量少的修改(对已有的 Node.js WEB程序做极少的修改即可部署到基于 IIS 的 iisnode 站点中)
集成管理体验(与IIS完美集成,可享受由 IIS 提供的强大功能,如端口共享、URL重写、压缩等)


好了,那现在如何在 IIS 中运行 Node.js 呢?
首先,你需要 IIS7(这需要 Windows Vista 以上的个人操作系统或者 Windows Server 2008 的服务器系统,Server 2003 上默认安装的 IIS 需要经过升级方可使用)
 
1 下载最新版的 node.exe,将其置于 c:\node;
2 下载 iisnode 的最新生成版
3 解压 iisnode 的 zip 文件到 c:\inetpub\iisnode 目录(这只是我的建议,并不确定是否就是最佳位置)[ciznx注:事实证明这并非最佳位置,下面我会注明,不影响此处的安装过程]
4 以管理员权限运行一个命令提示符,并运行此位置的 install.bat

请注意,你马上就要成功了!
好,现在进入 IIS 管理工具,并为 Node.js 网站新建一个应用程序池 Node Apps,托管代码部分随便选择。
在网站里建一个为 node.js 示例站点(刚才下载的 iisnode 项目中已包含),并指定端口为 1888、根目录为 c:\inetpub\iisnode\www,将其应用程序池设置为 Node Apps。站点目录结构应该如下图所示:
 
Node App Pool
 

如果在 IIS 管理面板中点击模块,就可以发现 iismode 已注册为本地代码模块:




此时,你就可以试着访问 http://localhost:1888/node/helloworld/hello.js 访问到你的 Node.js 示例站点,并获得如下响应:

Hello, world! [helloworld sample]

实际上,此文件的真实内容为:

var http = require('http');http.createServer(function (req, res) {  res.writeHead(200, {'Content-Type': 'text/plain'});  res.end('Hello, world! [helloworld sample]');}).listen(process.env.PORT);

[ciznx注:如果此时,你在浏览器里获得了 Http 错误指示Service Unavailable则表示网站权限方面遇到了问题。此时试着把刚才安装 iismode 时解压到 c:\inetpub\iisnode 的 www 目录复制到别处,为其添加 Users 的读访问权限,并修改当前站点的根目录为新目录]

好了,到这里,你的 Node.js 在 Windows 的 IIS 中的配置已完成。进一步的内容,请参照原文

三、相关资源


1 Node.js 官方网站及最新版下载
2 Node.js 0.5.5 版技术文档
3 在 Windows 上运行 Node.js,开始
4 本文的原文
5 iismode 项目地址





声明:此文章由ciznx (陈计节)结合原文翻译并进一步创作,欢迎转载;转载时请注明原出处。