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

如何在无Node.js服务场景下通过Nginx部署Next.js应用

Next.js 纯Nginx部署实现方案

纯Nginx无法直接运行依赖Node.js运行时的Next.js动态能力,仅能托管静态导出模式生成的纯静态文件,具体操作步骤如下:

  • 配置Next.js开启静态导出
    编辑项目根目录下的next.config.js/next.config.mjs,添加静态输出配置,关闭不兼容静态模式的默认图片优化:
    /** @type {import('next').NextConfig} */
    const nextConfig = {
      output: 'export',
      images: {
        unoptimized: true,
      },
      trailingSlash: true, // 可选,适配Nginx路径匹配规则,避免路由跳转异常
    }
    
    module.exports = nextConfig
    

    注意:静态导出模式不支持SSR、ISR、API路由、服务端Middleware、依赖服务端运行时的动态组件/逻辑,相关功能需要改造为纯静态客户端逻辑才能正常运行。

  • 构建生成静态文件
    在项目根目录执行构建命令:
    npm run build
    # 若使用yarn/pnpm,对应执行yarn build / pnpm build
    
    构建完成后,项目根目录会生成out目录,内为所有可直接托管的静态资源。
  • 上传静态文件到服务器
    将本地生成的out目录完整上传到服务器静态资源路径,例如/var/www/next-blog/out,并给Nginx运行用户分配读取权限:
    sudo chown -R www-data:www-data /var/www/next-blog/out
    sudo chmod -R 755 /var/www/next-blog/out
    
  • 修改Nginx配置
    替换原有反向代理规则为静态文件托管规则,同时适配Next.js客户端路由刷新404问题,保留原有Certbot生成的HTTPS配置即可,完整配置参考:
    server {
        if ($host = example.com) {
            return 301 https://$host$request_uri;
        } # managed by Certbot
    
        server_name example.com;
        return 301 https://example.com$request_uri;
    }
    
    server {
        listen 443 ssl;
        server_name example.com;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    
        # 静态资源根目录指向上传的out文件夹
        root /var/www/next-blog/out;
        index index.html;
    
        # 静态资源缓存规则
        location ~* \.(?:css|js|woff2?|ttf|eot|png|jpg|jpeg|gif|ico|svg|webp)$ {
            expires 1y;
            add_header Cache-Control "public, immutable";
            try_files $uri =404;
        }
    
        # 适配客户端路由,所有未匹配到静态文件的请求统一回退到index.html
        location / {
            try_files $uri $uri.html $uri/ /index.html;
        }
    }
    
  • 校验并重载Nginx配置
    执行以下命令校验配置合法性,重载后即可生效,无需启动任何Node.js服务:
    sudo nginx -t
    sudo systemctl reload nginx
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:30:43