NestJS应用通过DevOps部署到Azure App Service后访问返回404问题求助
问题排查与解决方案
核心问题定位
你当前使用的启动命令存在本质错误:
pm2 serve是用于托管静态站点的命令,仅能提供HTML/CSS/JS等静态资源的访问能力,而NestJS是Node.js服务端应用,dist文件夹存储的是编译后的服务端执行代码,不能通过静态托管方式启动。
你看到的容器初始化成功是Azure平台层面检测到容器启动完成,和容器内部的Node服务是否正常运行没有直接关联,这也是容器状态正常但访问返回404的核心原因。
第一步:修复启动命令
将原有启动命令替换为以下内容:
pm2 start /home/site/wwwroot/dist/main.js --no-daemon
不需要额外重定向日志到app.log,Azure App Service会自动捕获进程的标准输出/标准错误到平台日志系统中,方便后续排查。
其他常见排查项
如果修改启动命令后仍存在404问题,按以下顺序排查:
- 确认部署产物结构完整
可以通过Azure门户进入App Service的「控制台」或「SSH」功能,执行ls /home/site/wwwroot命令检查文件:- 确认
dist目录存在,且目录下存在main.js入口文件 - 确认项目依赖已安装:如果部署包未包含
node_modules文件夹,需要在启动命令前增加依赖安装逻辑,比如npm install --production && pm2 start /home/site/wwwroot/dist/main.js --no-daemon
- 确认
- 确认服务监听端口配置正确
Azure App Service Linux 环境要求应用监听PORT环境变量指定的端口(默认是80),需要修改NestJS项目的main.ts监听逻辑:
修改后需要重新构建部署生效。await app.listen(process.env.PORT || 3000); - 确认路由访问路径正确
如果NestJS项目配置了全局路由前缀(比如app.setGlobalPrefix('api')),直接访问根路径会返回404,需要携带前缀访问对应接口,比如访问/api/xxx而非/xxx。 - 查看服务运行日志
进入App Service控制台执行cat /home/site/wwwroot/app.log查看之前重定向的日志,确认是否存在依赖缺失、启动报错等异常信息。
内容的提问来源于stack exchange,提问作者user11455801
相关产品推荐
相关产品推荐

