如何连接分别部署在AWS Elastic Beanstalk的前端与后端服务
解决方案
为什么直接用EC2公网IPv4连接会失败
首先EB管理的EC2实例公网IP是动态分配的,实例重启、环境重建、伸缩组扩缩容都会变更IP,本身就不适合作为固定连接地址。其次默认安全组不会主动放开后端服务端口的公网入站规则,公网请求会被直接拦截。
两种正确配置方案
方案1:同VPC内网通信(优先推荐,适配你两台实例同安全组的场景)
同VPC内通信不需要走公网,延迟更低、安全性更高,配置步骤如下:
- 打开AWS Elastic Beanstalk控制台,进入Nest.js后端对应的环境,在「环境概览」页直接获取环境URL,格式为
<环境名>.<区域>.elasticbeanstalk.com,该域名固定不变,不受底层EC2实例变更影响。 - 调整公共安全组的入站规则:添加一条规则,来源选择当前安全组本身,协议为TCP,端口填写Nest.js服务监听的端口(如3000、8080等),允许同安全组内的服务互相访问。
- 确认Nest.js服务绑定的是
0.0.0.0而非127.0.0.1,否则内网请求无法被接收。 - Next.js的服务端请求直接配置上述环境URL作为API地址即可;如果是客户端侧请求需要调用后端,可额外配置前端Next.js服务做API请求代理,不需要把后端暴露到公网。
方案2:公网访问配置(适合需要前端客户端直接调用公网API的场景)
- 同样优先使用上述Nest.js后端的EB环境URL作为API地址,不要使用EC2公网IP。
- 调整安全组入站规则:添加规则,来源填
0.0.0.0/0(或你需要放行的公网网段),协议TCP,端口为后端服务监听端口。如果你的EB环境配置了应用负载均衡(ALB),需要同步给ALB的安全组放开对应端口。 - 验证后端服务的健康检查状态正常,没有被EB自动下线。
连通性验证
可以直接登录到Next.js对应的EC2实例,执行curl命令测试连通性,确认链路正常后再修改前端配置:
curl <你的后端EB环境URL>:<端口>/<健康检查路由>
如果返回正常响应说明链路没问题,前端配置后即可正常通信。
内容的提问来源于stack exchange,提问作者Allen Kim
相关产品推荐
相关产品推荐

