部署在EC2实例、搭配ELB及内网子域名的Node.js网站问题求助
针对EC2+ELB+内部子域名的Node.js网站部署问题排查方案
网络访问层面排查
- 验证内部子域名解析:在内部机器执行
nslookup 你的内部子域名,确认返回的是ELB的DNS记录/IP段,而非直接指向EC2实例IP。如果解析错误,检查内部DNS服务器的配置。 - 安全组规则校验:
- ELB安全组:入站规则需允许内部网段(如10.0.0.0/8、192.168.0.0/16等)的80/443端口流量;出站规则允许向EC2实例服务端口(如3000)发起请求。
- EC2实例安全组:入站规则仅允许ELB的安全组访问Node.js服务端口,不要直接开放给内部所有主机,确保流量必须经过ELB。
- NACL配置检查:若使用VPC网络ACL,需确保入站规则允许内部网段到ELB 80/443的流量,出站规则允许ELB到EC2服务端口的流量;同时反向的响应流量(如EC2到ELB、ELB到内部机器)也要放行,NACL是双向规则。
ELB配置验证
- 监听规则确认:检查ELB监听的80/443端口是否正确转发到EC2实例的Node.js服务端口,转发协议与服务匹配(HTTP/HTTPS)。若使用HTTPS,确认绑定的内部CA证书有效且完整。
- 目标组健康检查:
- 确认健康检查路径(如
/health)是Node.js服务实际存在且返回200状态码的端点;可在EC2实例上执行curl localhost:3000/health验证。 - 若健康检查失败,ELB会将实例从目标组移除,此时需排查服务是否正常运行、端口是否可访问。
- 确认健康检查路径(如
- 跨区域负载均衡(若启用):如果不需要跨区域流量,关闭该选项;若需要,确保其他区域的EC2实例在内部网络可达范围内。
Node.js服务自身问题排查
- 绑定地址检查:确保服务监听地址为
0.0.0.0而非127.0.0.1,否则ELB无法访问服务。示例代码:app.listen(3000, '0.0.0.0', () => { console.log('Server running on port 3000'); }); - 环境变量与依赖验证:确认EC2实例上的环境变量(如数据库地址、配置参数)正确,依赖已完整安装(执行
npm install或yarn install),避免服务启动失败或功能异常。 - 日志分析:查看Node.js服务日志(如PM2日志
pm2 logs、自定义日志文件),排查是否有端口占用、连接超时、依赖缺失等报错信息。
内部HTTPS子域名额外排查点
- 内部CA信任:若子域名使用HTTPS,确保内部机器的信任存储中包含签发该证书的内部CA根证书,否则会出现SSL证书不信任错误。可通过
curl -v https://你的内部子域名查看SSL握手过程的错误信息。 - ELB SSL终止配置:若ELB负责SSL终止,需确认证书链包含所有中间证书,避免部分内部系统(如不同版本的Windows/Linux)无法完成证书验证。
内容的提问来源于stack exchange,提问作者Ankita Chandel
相关产品推荐
相关产品推荐

