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
相关产品推荐
相关产品推荐

