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

Express服务器HTTPS连接出现502 Bad Gateway错误,求故障排查

问题分析与解决方案

核心原因:协议不匹配

你的Nginx在HTTPS配置块中,用http://localhost:3002代理请求,但Express的3002端口是HTTPS服务器,Nginx用HTTP协议去连接HTTPS端口,双方协议不兼容,导致上游连接提前关闭,触发502错误。

分步解决方案

方案1:推荐 - 让Nginx处理SSL,Express仅运行HTTP服务(常规反向代理模式)

这是生产环境的标准做法,Nginx负责SSL终止,后端Express只处理HTTP请求,配置更简洁且性能更优:

  1. 修改Express代码,移除HTTPS服务器相关逻辑,仅保留HTTP服务:
const app = express();

app.use(express.json());

app.use(
  cors({
    origin: ["*"],
    methods: ["GET", "PUT", "POST", "DELETE"],
    allowedHeaders: ["Origin", "Content-Type", "Authorization"],
  })
);

const httpPort = 3001;

app.listen(httpPort, () => {
  console.log(`HTTP gia-trainer-server listening on port ${httpPort}`);
});

app.get("/", (req, res) => {
  res.send("Hello World!!");
});
  1. 修改Nginx的HTTPS配置块,将proxy_pass指向Express的HTTP端口3001:
server {
        listen 443 ssl;
        server_name 3.145.91.237;

        ssl_certificate /home/ubuntu/ssl/gia-trainer/certificate.crt;
        ssl_certificate_key /home/ubuntu/ssl/gia-trainer/private.key;

        location / {
                proxy_pass http://localhost:3001;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}
  1. 重启服务:
# 重启Express(根据你的进程管理方式调整,比如pm2)
pm2 restart your-app-name
# 或直接重启进程
killall node && node your-app-file.js

# 重启Nginx
sudo systemctl restart nginx

方案2:保留Express HTTPS服务器(不推荐)

如果必须让Express运行HTTPS,需修改Nginx代理配置,使用HTTPS协议连接上游:

  1. 修改Nginx的HTTPS配置块中的proxy_pass为https://localhost:3002,并添加证书忽略配置:
server {
        listen 443 ssl;
        server_name 3.145.91.237;

        ssl_certificate /home/ubuntu/ssl/gia-trainer/certificate.crt;
        ssl_certificate_key /home/ubuntu/ssl/gia-trainer/private.key;

        location / {
                proxy_pass https://localhost:3002;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                # 忽略本地上游证书验证
                proxy_ssl_verify off;
        }
}
  1. 验证Express HTTPS服务状态:

    • 查看Express启动日志,确认无证书读取错误(检查SSL_FOLDER_PATH环境变量、证书文件路径是否正确)
    • 在EC2本地执行curl https://localhost:3002,确认能正常返回内容
    • 用netstat -tulpn | grep 3002检查端口是否被Node进程监听
  2. 重启Nginx和Express服务

额外排查点

若以上方案无效,可进一步检查:

  • Express进程权限:确保Node能读取private.key和certificate.crt文件
  • 本地防火墙:执行sudo ufw status,确认EC2本地防火墙未限制3002端口
  • Nginx配置合法性:执行sudo nginx -t验证配置文件无语法错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:27:50