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

Nuxt结合Nginx部署疑问:dist目录与SSR配置及--standalone参数咨询

Nuxt SSR 部署方案详解

核心区别先搞懂

Nuxt SSR 不是纯静态站点,它需要 Node.js 服务动态渲染页面,这和 Vue CLI 构建的纯静态项目本质不同——后者的 dist 全是静态文件,直接扔给 Nginx 就能跑;但 Nuxt 构建后的 dist/server 是 Node 服务代码,必须先启动这个服务,再通过 Nginx 反向代理转发请求。


方案一:PM2 + Nginx 反向代理(最常用)

这是生产环境的标准部署方式,兼顾稳定性和性能:

  1. 构建与部署文件
    在本地或 CI/CD 环境执行 nuxt build 生成 dist 目录,然后把整个项目(包括 package.json、nuxt.config.js、dist、node_modules)传到服务器;如果是全新部署,记得在服务器上执行 npm install 安装依赖。
  2. 用 PM2 管理 Node 服务
    PM2 可以保证服务持续运行,崩溃自动重启,执行命令:
    pm2 start npm --name "nuxt-ssr" -- run start
    
    这里的 start 是 package.json 里的脚本,默认 Nuxt 生成的脚本是 "start": "nuxt start",会启动监听 3000 端口的 Node 服务。
  3. Nginx 反向代理配置
    编辑 Nginx 配置文件(比如 /etc/nginx/conf.d/nuxt.conf),把请求转发到 Node 服务,同时让 Nginx 直接处理静态资源减轻服务压力:
    server {
        listen 80;
        server_name your-domain.com;
    
        # 主请求转发到 Node 服务
        location / {
            proxy_pass http://localhost:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    
        # 静态资源直接读取,缓存一年
        location /_nuxt/ {
            alias /path/to/your/project/dist/client/_nuxt/;
            expires 1y;
            add_header Cache-Control "public, immutable";
        }
    
        location /static/ {
            alias /path/to/your/project/dist/client/static/;
            expires 1y;
            add_header Cache-Control "public, immutable";
        }
    }
    
    配置完后重启 Nginx:nginx -s reload

方案二:使用 --standalone 参数打包(无需服务器装依赖)

如果你不想在服务器上安装 node_modules,可以用 --standalone 参数让 Nuxt 把所有 Node 依赖打包进 dist/server 目录:

  1. 构建独立包
    nuxt build --standalone
    
    构建完成后,dist/server 会包含所有运行所需的依赖,无需额外安装。
  2. 部署与启动
    只需要把 dist 目录传到服务器,然后用 Node 直接启动服务:
    node dist/server/index.js
    
    同样可以用 PM2 管理:
    pm2 start dist/server/index.js --name "nuxt-ssr"
    
  3. Nginx 配置
    和方案一完全一致,静态资源依然指向 dist/client 下的对应目录。

为什么直接设置 Nginx 索引文件没用?

server 目录下的 index.ssr.html 只是渲染模板,不是最终的静态页面——SSR 页面需要 Node 服务根据请求动态填充数据、渲染组件后再输出 HTML,直接用 Nginx 访问这个模板文件只会得到空壳内容,必须通过 Node 服务处理请求才能得到完整页面。


额外注意事项

  • 服务器 Node.js 版本要和本地构建环境尽量一致,避免依赖兼容问题;
  • 用 --standalone 打包时,构建环境的操作系统要和服务器一致(比如都是 Linux),否则部分二进制依赖可能无法正常运行;
  • PM2 可以设置开机自启:执行 pm2 startup 生成开机脚本,再执行 pm2 save 保存当前服务状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:42:51