You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

首次部署应用至服务器访问时遇Status error 500,求排查方法

排查业务应用部署出现500错误的分步指南

作为第一次部署应用的开发者,遇到500这种通用服务器错误很正常,咱们从最核心的环节开始排查,一步步缩小范围:

1. 先确认业务应用本身能独立运行

既然你的Hello World能通过私网IP正常访问,说明服务器的基础Node.js、pm2环境是没问题的,先把焦点放在业务应用上:

  • 直接用「私网IP+业务应用监听端口」访问(比如http://192.168.x.x:3000,换成你的实际IP和端口),如果这里就返回错误,那问题和Nginx无关,完全是应用自身的问题。
  • 立刻查看pm2的应用日志,执行命令:pm2 logs 你的业务应用名称,日志里会详细记录应用启动失败、运行时崩溃、未捕获异常的信息——比如依赖缺失、配置文件写错、数据库连不上这类问题,几乎都能在这里找到线索。
  • 试试直接用node命令启动应用:node 你的业务入口文件.js,有时候pm2的日志可能没捕获到实时启动报错,直接在控制台跑能看到更直观的错误提示,比如某个模块找不到。

2. 验证Nginx配置与日志

如果应用本身能通过IP+端口正常访问,那问题大概率出在Nginx的反向代理环节:

  • 先检查Nginx配置是否合法,执行nginx -t,如果配置有语法错误(比如括号没关、路径写错),会直接告诉你错误位置,这是最常见的Nginx问题。
  • 查看Nginx的错误日志,默认路径是/var/log/nginx/error.log(不同发行版可能略有差异,比如CentOS、Ubuntu都是这个路径),日志会记录反向代理时的问题:比如无法连接到应用端口、权限不足、路径映射错误等。
  • 核对你的Nginx反向代理配置,确保核心部分正确:
    server {
        listen 80;
        server_name 你的公网IP或域名;
    
        location / {
            proxy_pass http://你的私网IP:业务应用端口;  # 这里的端口必须和应用实际监听的一致
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    
    另外可以用netstat -tlnp | grep node或者ss -tlnp | grep node确认应用确实在监听你配置的端口,避免端口写错。

3. 检查服务器权限与防火墙

有时候权限或防火墙会悄悄搞破坏:

  • 确认业务应用的文件和目录权限是否正确,比如node进程有没有权限读取配置文件、静态资源,别因为权限不足导致应用无法加载必要文件。
  • 检查服务器防火墙(比如firewalld、iptables),虽然Hello World能访问,但要确保业务应用的端口没有被防火墙拦截——不过如果是私网访问的话,防火墙拦截概率低,但还是确认下更稳妥。
  • 如果你用root用户跑了Hello World,但业务应用用普通用户启动,要注意普通用户无法监听1024以下的端口,如果你的应用配置了80端口,要么换成1024以上的端口,要么给node进程授权(比如setcap 'cap_net_bind_service=+ep' /usr/bin/node)。

4. 核对环境变量与依赖

业务应用比Hello World复杂得多,依赖和环境变量很容易出问题:

  • 确保服务器上已经安装了所有依赖,执行npm installyarn install(根据你的包管理器),安装时留意有没有报错,比如某个依赖安装失败、网络问题导致依赖缺失。
  • 检查应用所需的环境变量是否配置正确,比如数据库连接字符串、密钥、第三方服务的API密钥等,很多时候500错误就是因为应用连不上数据库或者读取不到必要的环境变量导致的。
  • 确认服务器的Node.js版本和开发环境一致,版本不兼容很容易导致运行时错误,比如某些语法在低版本Node.js不支持。

按照这个顺序排查,基本能快速定位问题所在。

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

火山引擎 最新活动