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

NextJS部署Ubuntu服务器遇500内部错误,本地运行正常

问题解决:NextJS部署Ubuntu后静态脚本返回500错误

核心问题分析

你的Nginx配置中存在重复的/_next/static/ location规则,且自定义规则的路径配置错误,导致Nginx无法正确定位静态资源文件,进而返回500错误。同时需确认服务器文件权限、pm2运行路径是否正确。

解决方案步骤

1. 修复Nginx配置

删除冲突的自定义location ~ ^/_next/static/(.*)$规则,保留正确的静态资源映射配置。修正后的完整配置如下:

server {
    server_name specialservername.com;

    gzip on;
    gzip_proxied any;
    gzip_types application/javascript application/x-javascript text/css text/javascript;
    gzip_comp_level 5;
    gzip_buffers 16 8k;
    gzip_min_length 256;

    # 正确映射NextJS静态资源
    location /_next/static/ {
        alias /var/www/frontend/.next/static/;
        expires 365d;
        access_log off;
        add_header Cache-Control "public, immutable";
    }

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        add_header Access-Control-Allow-Origin *;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/specialservername.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/specialservername.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
    if ($host = specialservername.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    server_name specialservername.com;
    return 404; # managed by Certbot
}

关键修正点:

  • 移除冲突规则,避免Nginx匹配逻辑混乱
  • 保留的alias配置直接指向构建后的静态资源目录,确保路径绝对正确

2. 验证服务器文件权限

确保Nginx进程(默认以www-data用户运行)能读取项目文件:

sudo chown -R www-data:www-data /var/www/frontend
sudo chmod -R 755 /var/www/frontend/.next/static

3. 确认pm2运行配置

检查pm2工作目录是否指向项目根目录:

  • 执行pm2 list查看进程的cwd字段,确认是否为/var/www/frontend
  • 若路径错误,生成并修改pm2配置文件:
# 在项目根目录生成配置文件
pm2 init

编辑ecosystem.config.js:

module.exports = {
  apps : [{
    name: "next-frontend",
    script: "npm",
    args: "start",
    cwd: "/var/www/frontend",
    env: {
      NODE_ENV: "production"
    }
  }]
}

重启pm2:

pm2 delete next-frontend
pm2 start ecosystem.config.js

4. 验证部署状态

  • 重启Nginx使配置生效:sudo systemctl reload nginx
  • 查看Nginx错误日志排查问题:sudo tail -f /var/log/nginx/error.log
  • 查看pm2项目运行日志:pm2 logs next-frontend

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:57:33