You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一Node.js实例上部署SSR Nuxt与NestJS应用

核心结论

技术上可以在同一个Node.js进程内同时运行SSR模式的Nuxt和NestJS,但生产环境绝对不推荐这么做。
Plesk面板标注的「单域名仅支持一个Node.js实例」,指的是面板可视化配置里只能给域名绑定一个Node启动入口,不是指服务器上只能跑一个Node进程,完全有更稳定的标准生产部署方案绕开这个限制。

同进程部署的缺陷(为什么不推荐生产用)
  • 故障完全耦合:任意一方代码抛出未捕获异常,整个Node进程直接崩溃,前端页面和后端API会同时不可用
  • 资源争抢:Nuxt SSR属于CPU密集型操作,和NestJS的API逻辑共用同一个事件循环,高峰期两边的响应速度都会被严重拖慢
  • 依赖冲突风险高:Nuxt和NestJS的生态依赖如果出现版本不兼容(比如不同版本的RxJS、工具库),同进程部署会直接报运行时错误,排错成本极高
  • 无法独立扩容:后续如果需要单独给API或者SSR服务加资源、做集群,同进程架构完全没法拆分
同进程部署的实现方式(仅适合本地测试/个人Demo,禁止生产使用)

核心逻辑是在同一个Node服务内做路径分流:/api前缀的请求交给NestJS处理,其余所有请求交给Nuxt SSR渲染。

  1. 给NestJS设置全局路由前缀,所有API接口统一走/api路径,在NestJS入口文件main.ts中添加配置:
app.setGlobalPrefix('api');
  1. 将Nuxt构建后的产物引入NestJS项目,添加通配符路由接管所有非API请求,核心实现代码:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { loadNuxt } from 'nuxt';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  // 配置API前缀
  app.setGlobalPrefix('api');
  // 生产模式加载Nuxt实例
  const nuxt = await loadNuxt('start');
  // 所有非/api开头的请求转发给Nuxt渲染
  app.use(/^(?!\/api).*/, (req, res) => {
    res.setHeader('Content-Type', 'text/html');
    nuxt.render(req, res);
  });
  // 监听端口和Plesk面板配置的端口保持一致
  await app.listen(process.env.PORT || 3000);
}
bootstrap();
  1. 合并两个项目的package.json依赖,依次执行Nuxt构建、NestJS构建,把整个项目目录上传到服务器,Plesk面板里Node启动入口指向NestJS编译后的main.js文件即可。

警告:该方案没有任何故障隔离能力,只要业务有正式用户访问,就不要用这个部署方式。

Plesk环境下的标准生产部署方案

这个方案完全符合生产环境稳定性要求,也不需要占用面板分配的多个Node实例配额:

  • 分别构建两个项目:Nuxt目录下执行nuxt build生成SSR产物,NestJS目录下执行nest build生成后端服务产物,两个项目分别存放在服务器的独立目录下
  • 用PM2做进程守护:如果服务器没有预装PM2,执行npm install pm2 -g全局安装,然后分别启动两个服务,绑定不同的本地端口:
    • 启动NestJS服务:pm2 start /你的Nest项目路径/dist/main.js --name nest-api --port 3001
    • 启动Nuxt SSR服务:pm2 start /你的Nuxt项目路径/.output/server/index.mjs --name nuxt-ssr --port 3000
    • 执行pm2 save保存进程列表,配置PM2开机自启,保证服务器重启后服务自动恢复
  • 配置Nginx反向代理规则:进入Plesk面板对应域名的「Apache与Nginx设置」,添加两条转发规则:
    • 所有匹配/api/*路径的请求,转发到本地3001端口的NestJS服务
    • 其余所有路径的请求,转发到本地3000端口的Nuxt SSR服务
  • 面板里分配的Node.js实例,只需要写一个最简单的返回200状态码的健康检查脚本作为启动入口即可,实际业务流量已经通过Nginx反向代理分发给PM2托管的两个独立服务,完全不受面板单Node实例的限制。

这个方案的优势:

  • 前后端服务完全隔离,单个服务崩溃不会影响另一个
  • 可以单独重启、更新、扩容前后端服务,不需要停掉整个应用
  • 没有同进程的资源争抢、依赖冲突问题,稳定性和性能都符合生产要求

内容的提问来源于stack exchange,提问作者paul321

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 02:51:32