在Windows服务器环境中搭建IIS小程序需要结合IIS的Web服务器功能和Node.js运行时环境,因为小程序后端通常基于JavaScript/TypeScript开发,以下是详细操作步骤和注意事项:

环境准备
- 安装IIS组件:通过服务器管理器添加“Web服务器(IIS)”角色,确保安装“应用程序开发”下的“ASP.NET”、“.NET Extensibility”和“JavaScript”模块。
- 安装Node.js:从官网下载LTS版本安装包,勾选“Add to PATH”选项,安装后通过命令行验证
node -v
和npm -v
。 - 安装IIS URL Rewrite模块:从微软官方下载并安装,用于处理小程序路由规则。
项目配置
- 初始化Node.js项目:在项目目录运行
npm init -y
,安装Express框架(npm install express
)和微信开发者工具推荐的wechatpay-node
等依赖。 - 配置web.config:在项目根目录创建web.config文件,配置Node.js进程管理(使用iisnode模块)和URL重写规则:
<configuration> <system.webServer> <handlers> <add name="iisnode" path="server.js" verb="*" modules="iisnode"/> </handlers> <rewrite> <rules> <rule name="DynamicContent"> <match url="/*"/> <action type="Rewrite" url="server.js"/> </rule> </rules> </rewrite> <iisnode node_env="%APPSETTING_NODE_ENV%" loggingEnabled="true" loggingDirectory="logs"/> </system.webServer> </configuration>
部署流程
- 上传项目文件:通过FTP或文件管理器将项目文件(包括node_modules)上传至IIS站点目录。
- 配置IIS站点:在IIS管理器中创建网站,设置物理路径为项目目录,应用程序池选择“无托管代码”模式。
- 安装依赖:在IIS管理器中打开“配置编辑器”,将节定位至
system.applicationHost/applicationPools
,修改对应应用程序池的processModel.identity
为LocalSystem
,然后在命令行进入站点目录执行npm install
。
性能优化

- 启用GZIP压缩:在IIS管理器中打开“压缩”功能,勾选“静态内容”和“动态内容”。
- 配置反向代理:通过URL Rewrite模块将请求代理至Node.js服务,
<rule name="Proxy to Node.js" stopProcessing="true"> <match url="^api/(.*)" /> <action type="Rewrite" url="http://localhost:3000/api/{R:1}" /> </rule>
- 日志管理:配置IIS日志轮转,同时使用PM2(需全局安装)管理Node.js进程,确保服务稳定性。
常见问题解决
- 端口冲突:若Node.js服务默认端口3000被占用,修改server.js中的
app.listen(3000)
为app.listen(0)
,通过环境变量动态分配端口。 - 权限问题:确保IIS_IUSRS用户对站点目录有读写权限,特别是logs和node_modules文件夹。
相关问答FAQs:
-
问:小程序后端部署到IIS时出现404错误,如何解决? 答:首先检查web.config中的URL重写规则是否正确,确保请求路径能正确映射到server.js,其次确认iisnode模块是否正确安装,可通过在浏览器中直接访问server.js路径测试(如http://yoursite/server.js),最后检查IIS处理程序映射中是否添加了iisnode模块。
-
问:如何实现IIS托管的小程序支持HTTPS? 答:需在IIS中绑定SSL证书(可申请免费Let's Encrypt证书),然后在web.config中添加重写规则将HTTP请求强制跳转HTTPS:
(图片来源网络,侵删)<rule name="HTTP to HTTPS redirect" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" ignoreCase="true" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /> </rule>