要解决的问题

502 表示网关没有得到可用的上游响应,但单看状态码无法断定是应用崩溃、地址配置错误还是超时。先在服务器内部直接请求应用,再通过 Nginx 请求同一路径,比较两层结果。所有命令都应在服务器终端执行。

适用环境

Ubuntu 24.04、Nginx 与监听本机端口的 Web 应用。以下服务名 navsite、端口 8000 适用于本站部署示例。

操作步骤与示例

将以下内容放在对应终端或脚本中执行。示例路径、服务名需要与你的环境一致。

curl -i --noproxy '*' --connect-timeout 3 --max-time 10 http://127.0.0.1:8000/healthz
systemctl status navsite --no-pager
nginx -t
tail -n 30 /var/log/nginx/error.log

如何判断结果

若回环请求也失败,优先检查应用服务、绑定地址和端口;若回环正常但经 Nginx 失败,再核对 proxy_pass 与错误日志中对应时间的记录。本站健康接口正常时返回 status 为 ok 的 JSON,但其他应用需要换成它自己的健康地址。

常见问题与排查

Connection refused、超时和应用返回 500 是不同现象。不要因为日志含 upstream 就直接调大所有超时,也不要把 127.0.0.1 改为公网监听来试错。nginx -t 通过只说明语法及相关配置检查通过,不保证上游程序健康。

适用边界

此页提供只读排查顺序,不自动重启或改配置。示例已对照官方代理模块说明,但本次未在你的生产主机执行 Linux 排查命令;真实根因需要结合当时的请求和日志确认。

参考资料