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

AWS EC2 HTTPS配置故障:443端口目标组异常及访问超时排查

问题诊断

核心问题拆解:

  • 443目标组不健康:大概率是目标组健康检查配置与EC2后端服务不匹配,或负载均衡的SSL终止配置未完成
  • HTTPS/无端口访问超时:Route53记录未指向负载均衡、负载均衡443监听未绑定有效SSL证书、或安全组/路由规则存在拦截

一、推荐方案:SSL终止于AWS负载均衡(ALB/NLB)

这种模式更易维护、性能更优,也是AWS官方推荐的架构:

1. 修正负载均衡443监听配置

  • 登录AWS控制台进入负载均衡器页面,找到你的ALB/NLB
  • 编辑443端口监听:
    • 协议选HTTPS,端口443
    • 绑定你在ACM签发的SSL证书(必须是已颁发状态,域名验证完成)
    • 转发目标组的协议设为HTTP,目标端口填8080(和Node.js应用端口一致)

2. 修复目标组健康检查

  • 进入目标组页面,编辑健康检查:
    • 协议:HTTP
    • 端口:8080(和Node.js应用监听端口一致)
    • 路径:/(对应你Node.js的根路由,确保访问该路径返回200状态码)
    • 间隔、超时保持默认即可,重点保证健康检查请求能被后端响应

3. 修正Route53域名解析记录

  • 进入Route53托管区,确保personindicator.com的A/CNAME记录指向负载均衡的DNS名称(不是EC2公网IP):
    • A记录选「别名」,直接关联你的负载均衡
    • CNAME记录直接填写负载均衡的完整DNS域名

4. 优化Node.js应用(强制HTTPS跳转,可选但推荐)

负载均衡会通过X-Forwarded-Proto头传递原始请求协议,添加中间件强制非HTTPS请求跳转:

// 放在所有中间件最前面
app.use((req, res, next) => {
  if (req.headers['x-forwarded-proto'] !== 'https') {
    return res.redirect(`https://${req.headers.host}${req.url}`);
  }
  next();
});

// 原有代码保留
app.use(cors());
app.use(express.json());

app.get("/", (req, res) => {
  res.status(200).send("server running");
});

const port = process.env.PORT || 8080;
app.listen(port, () => {
  console.log(`Server running on http://localhost:${port}`);
});

5. 调整80端口重定向规则

把原来的8080端口重定向改成80端口的规则:

  • 编辑负载均衡80端口监听,设置为重定向到HTTPS,端口443,主机头保持personindicator.com

二、备选方案:直接在Node.js应用处理SSL(不推荐)

仅适合无负载均衡的场景,步骤如下:

1. 获取SSL证书文件

ACM证书无法直接下载,可通过Certbot生成Let's Encrypt证书,或使用自签证书,最终需要两个文件:cert.pem(证书)和key.pem(私钥)

2. 修改Node.js代码启用HTTPS

const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();

app.use(cors());
app.use(express.json());

app.get("/", (req, res) => {
  res.status(200).send("server running");
});

// 加载证书文件
const sslOptions = {
  key: fs.readFileSync('./private-key.pem'),
  cert: fs.readFileSync('./certificate.pem')
};

const port = process.env.PORT || 443;
https.createServer(sslOptions, app).listen(port, () => {
  console.log(`Server running on https://localhost:${port}`);
});

3. 调整目标组与负载均衡

  • 目标组协议改为HTTPS,端口443
  • 负载均衡443监听直接转发到目标组(无需SSL终止)
  • 确保EC2安全组开放443端口

故障排查分步指南

1. 验证SSL证书有效性

  • 进入ACM控制台,确认证书状态为「已颁发」,域名验证记录(Route53中的CNAME)存在且生效

2. 检查目标组健康检查

  • 登录EC2实例,执行curl http://localhost:8080,确认返回200状态码
  • 检查EC2安全组,确保允许负载均衡所在安全组访问8080端口(不要只开放0.0.0.0/0)
  • 查看目标组健康检查日志,明确失败原因(比如超时、状态码非200)

3. 排查负载均衡配置

  • 用curl -v https://personindicator.com查看请求链路,判断是DNS解析失败、TCP连接超时还是SSL握手出错
  • 确认负载均衡安全组允许0.0.0.0/0访问80、443端口

4. 验证EC2后端状态

  • 执行netstat -tulpn | grep 8080,确认Node.js应用监听0.0.0.0:8080(不是仅localhost)
  • 检查EC2子网路由表,确保关联了互联网网关(IGW)
  • 检查EC2网络ACL,允许80、443、8080端口的入站/出站流量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:07:53