Azure App Service部署Node.js应用始终返回HTTP ERROR 404排查
先明确:Azure App Service不需要手动添加端口防火墙规则,平台会自动将外部请求转发到你代码里process.env.PORT指定的端口,所以端口不是问题核心,别在这浪费时间。
以下是几个你可能遗漏的关键点:
1. 确认启动命令配置正确
Azure App Service需要明确知道怎么启动你的Node.js应用,默认会找package.json里的start脚本。如果你的项目里没有package.json,或者start脚本没配置,平台可能无法正确启动应用。
- 如果你没有
package.json,在项目根目录创建一个,添加:{ "scripts": { "start": "node index.js" } } - 或者直接在Azure门户的App Service配置里设置启动命令:
进入你的App Service → 配置 → 常规设置 → 启动命令,填入node index.js,保存后重启应用。
2. 检查部署文件是否在正确目录
Azure App Service的Node.js应用需要部署到wwwroot目录下。确认你的DevOps流水线是否把所有必要文件(index.js、package.json等)都部署到了site/wwwroot路径下。
可以通过门户的“高级工具”→“Kudu”→“调试控制台”→“CMD”,进入site/wwwroot目录,看看是否有你的index.js文件,以及文件内容是否正确。
3. 查看应用日志,确认应用是否真的启动
门户显示“启动状态”不代表应用实际运行成功,可能启动过程中崩溃了但平台没检测到。
- 开启应用日志:进入App Service → 监控 → 日志流,或者在“配置”→“日志”里开启“应用日志文件”,然后查看日志内容。
- 日志里如果有类似
Error: Cannot find module...或者其他启动错误,就能定位问题。你的代码用的是原生http模块,大概率是启动命令或文件路径的问题。
4. 验证路由匹配逻辑
虽然你本地访问正常,但可以在代码里加日志打印实际收到的请求URL,确认是否和预期一致:
修改index.js,在处理请求时添加一行:
console.log('Received request URL:', request.url);
然后通过日志流查看实际请求路径,排查是否有路径转发导致的匹配问题。
5. 确认Node.js版本兼容
你切换了版本但没用,可检查package.json里的engines字段是否和你设置的版本一致(如果有的话):
{ "engines": { "node": "~18" } }
同时确保指定的版本在Azure App Service支持的列表范围内。
按上面的步骤排查,最常见的问题就是没配置启动命令,导致平台不知道怎么启动应用——虽然门户显示启动,但实际没有运行服务,所以访问返回404。
内容的提问来源于stack exchange,提问作者eliassal

