Node.js部署IIS:端口监听与默认文件配置问题求助
解决方案
核心思路
通过URL重写规则的条件判断,让IIS优先处理存在的静态文件,仅将不存在的请求反向代理到Node.js服务(3000端口),同时在Express中配置根路由作为默认页面,避免IIS直接返回app.js源码。
步骤1:修正IIS默认文档配置
- 打开IIS管理器,定位到你的站点,双击「默认文档」
- 移除列表中的
app.js(避免IIS直接把它当作纯文本文件返回) - 保留或添加常规静态默认文档(如
index.html),后续由Express处理根路径的默认请求
步骤2:配置URL重写反向代理规则
- 打开站点的「URL重写」模块,点击「添加规则」→ 选择「反向代理」
- 目标地址填写
http://localhost:3000,按需选择是否开启「启用SSL卸载」,点击确定 - 编辑刚创建的反向代理规则,切换到「条件」标签,添加两个条件:
- 第一个条件:
- 条件输入:
{REQUEST_FILENAME} - 检查输入字符串是否:
不是文件 - 逻辑分组:
匹配所有条件
- 条件输入:
- 第二个条件:
- 条件输入:
{REQUEST_FILENAME} - 检查输入字符串是否:
不是目录
- 条件输入:
- 第一个条件:
- 保存规则
步骤3:确保Express根路由配置正确
在你的app.js中添加根路径处理,作为站点的默认页面:
const express = require('express'); const app = express(); // 根路由:访问域名/localhost时返回默认内容 app.get('/', (req, res) => { // 可返回纯文本、HTML字符串,或渲染本地HTML文件 res.send('<h1>Welcome to my site!</h1>'); // 若返回本地文件,用:res.sendFile(__dirname + '/public/index.html'); }); // 其他业务路由示例 app.get('/api', (req, res) => { res.json({ status: 'ok', message: 'Node.js service works' }); }); app.listen(3000, () => { console.log('Node.js server running on port 3000'); });
效果验证
- 访问
www.mydomain.com或localhost:触发Express根路由,返回配置的默认页面(而非app.js源码) - 访问
www.mydomain.com/about.html(若该静态文件存在于IIS站点目录):IIS直接返回静态文件 - 访问
www.mydomain.com/api:请求被转发到3000端口,由Express处理返回对应内容
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

