nodejs 的管理工具有 PM2,但是,有 bug,一些接口莫名其妙的就挂了,直接用 node 启动项目是没问题的。刚好服务器是 window2016,索性就用 iis 来管理 node 项目吧。
环境准备
- 安装 nodejs官网选择 LTS 版本下载
- 安装 iisnode下载点击第二个 64 位的安装包进行下载
- 安装 iis 的 URL Rewrite 模块官网点击’Install this extension’下载
开始配置
nodejs 双击按钮,一路 next,安装后,win+r 输入 cmd 打开命令窗口,输入:node -v
得到版本号成功。
iisnode 是 iis 的模块,用于执行 nodejs 程序。
- 安装完毕后,进入安装目录,找到 setupsamples.bat 文件双击执行
- 执行 setupsamples.bat 成功后,即在 Default Web Site 站点下创建了一个名称为 node 的目录.
- 访问http://localhost/node/,出现如下页面即代表iisnode 安装成功。
URL Rewrite 是 iis 模块,可以通过定义规则实现 URL 的重定向。
点击绿色按钮下载,然后双击安装
安装完成后访问http://localhost/node/helloworld/hello.js,出现如下页面即代表URL Rewrite 模块安装成功。
部署项目
上面两大步骤全做完毕,接下来开始正式配置。
建立站点。
在 iis 中建立一个新的站点,指向 nodejs 项目的文件夹。创建 web.config 文件。
在 nodejs 项目文件夹的根目录下新建一个 web.config 文件并写入以下内容:<configuration> <system.webServer> <!-- 指示main.js文件是node.js应用程序执行的入口文件,现在由iisnode模块处理 --> <handlers> <add name="iisnode" path="main.js" verb="*" modules="iisnode" resourceType="Unspecified" requireAccess="Script" preCondition="bitness64" /> </handlers> <rewrite> <rules> <rule name="all"> <match url="/*" /> <action type="Rewrite" url="main.js" /> </rule> </rules> </rewrite> <!-- iisnode配置只能有一个 --> <iisnode node_env="%node_env%" nodeProcessCountPerApplication="1" maxConcurrentRequestsPerProcess="1024" maxNamedPipeConnectionRetry="100" namedPipeConnectionRetryDelay="250" maxNamedPipeConnectionPoolSize="512" maxNamedPipePooledConnectionAge="30000" asyncCompletionThreadCount="0" initialRequestBufferSize="4096" maxRequestBufferSize="65536" watchedFiles="*.js;node_modules\*;router\*.js;views\*.jade" uncFileChangesPollingInterval="5000" gracefulShutdownTimeout="60000" loggingEnabled="true" logDirectory="iisnode" debuggingEnabled="true" debugHeaderEnabled="false" debuggerPortRange="5058-6058" debuggerPathSegment="debug" maxLogFileSizeInKB="128" maxTotalLogFileSizeInKB="1024" maxLogFiles="20" devErrorsEnabled="true" flushResponse="false" enableXFF="false" configOverrides="iisnode.yml" nodeProcessCommandLine="C:\Program Files\nodejs\node.exe" promoteServerVars="REMOTE_ADDR" /> <defaultDocument> <files> <add value="index.js" /> </files> </defaultDocument> <!-- 另外一个可以修改的设置是node.exe可执行文件和拦截器的路径: <iisnode nodeProcessCommandLine=""%programfiles%\nodejs\node.exe"" interceptor=""%programfiles%\iisnode\interceptor.js"" /> --> </system.webServer> </configuration>
浏览访问 nodejs 项目网站。
一般 nodejs 项目都是后端接口程序,那么此时你可以尝试在客户端请求自己的接口了。设置 nodejs 项目文件夹的用户读写权限,找到电脑用户管理,找到一个包含 iis 字样的用户,编辑-把所有权限勾上,即可解决 iisnode 无法工作的问题。
常见问题
1、执行 iisnode 安装文件夹下的 setupsamples.bat 不成功。
如果在执行 setupsamples.bat 的过程中发生了错误并提示:ERROR<message:找不到带有标识符“Default Web Site/node”的APP对象。>
,如下图所示:
这是因为 iis 默认创建的站点 Default Web Site 被删除了,重新创建一个名为 Default Web Site 的站点即可。
- 无法安装 URL Rewrite。
在 URL Rewrite 的下载页面,点击“Install this extension”下载的安装程序可能会长时间停留在如下安装页面无法安装完成。
可通过下载下方的安装程序进行安装,如下图所示: - 修改代码中的监听端口号。
由于 iis 部署站点时已经设置了端口号,因此代码中监听端口的语句可进行优化修改,如将
server.listen(3000)
修改为server.listen(process.env.PORT || 3000)
process.env.PORT:读取当前目录下环境变量 port 的值。
- web.config 里的启动项目入口文件,必须在项目根目录里,比如我的是”/main.js”不能是’bin/main.js’
综合参考了如下资料,在此表示感谢!
nodejs 部署到 iis,详解 iis 如何部署运行 nodejs
记录一次使用 iisnode 部署 node 项目遇到的坑!