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

AWS容器中Docker部署的Node.js服务无法访问问题排查

AWS部署后Node后端接口返回React HTML页面的排查与解决

问题场景

本地开发/本地Docker运行时,http://localhost:3030/dbtest可正常返回接口数据;部署到带负载均衡的AWS EC2容器后,请求http://jermasearch.com:3030/dbtest却返回React应用的HTML页面。已确认Node服务和React应用均正常启动,3030端口开放,怀疑Nginx或负载均衡配置存在问题。

排查与解决步骤

1. 检查负载均衡器(ALB)的端口转发规则

  • 登录AWS控制台,进入EC2负载均衡器页面,找到对应ALB
  • 确认是否添加了3030端口的监听器:
    • 若未添加,新建监听器:协议选择HTTP/HTTPS,端口设为3030
    • 配置目标组,将流量转发到EC2实例的3030端口,同时确保目标组的健康检查规则指向Node服务的健康接口(如/dbtest)
  • 若ALB未配置3030端口转发,请求会被默认路由到80端口的Nginx,从而返回React页面

2. 验证EC2安全组配置

  • 确保EC2实例的安全组允许负载均衡器安全组访问3030端口(而非仅开放公网访问)
  • 若需直接通过公网访问EC2的3030端口,需放行0.0.0.0/0的3030入站流量(不推荐此方式,建议通过ALB转发更安全)

3. 优化Nginx配置(避免暴露3030端口的更优方案)

无需单独暴露3030端口,让Nginx监听80端口,将特定路径反向代理到Node服务:

server {
    listen 80;
    server_name jermasearch.com;

    # 处理React静态文件
    location / {
        root /usr/share/nginx/html;
        try_files $uri $uri/ /index.html;
    }

    # 反向代理Node后端接口
    location /api/ {
        proxy_pass http://localhost:3030/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

配置完成后,前端请求/api/dbtest即可转发到Node服务,无需使用3030端口,同时避免端口暴露的安全风险。

4. 确认Docker容器端口配置

  • 检查Dockerfile是否包含EXPOSE 80 3030指令,确保容器内端口正确暴露
  • 确认EC2上运行容器的命令是否正确映射了3030端口(如docker run -p 80:80 -p 3030:3030 <镜像名>)

5. 分步验证

  • 先在EC2实例内部测试:执行curl http://localhost:3030/dbtest,确认Node服务在容器内正常响应
  • 测试ALB的3030端口:curl http://<ALB域名>:3030/dbtest,验证负载转发是否生效
  • 最后测试域名:curl http://jermasearch.com:3030/dbtest(或使用优化后的/api/dbtest路径)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:22:07