EC2 实例在 ALB 后面时无法连接到 Stripe

问题描述 投票:0回答:1

我正在部署集成 Stripe 支付的 NodeJS 后端。当前端用户单击“结帐”按钮时,后端 API 只需调用 Stripe SDK 创建结帐会话,然后用户将被重定向到 Stripe 结帐页面。我在本地测试了它,一切都按预期工作。

当启动服务以在 ALB 后面的 EC2 上运行容器时,前端能够在大多数端点上顺利地对后端进行 API 调用。但是,它无法连接到 Stripe。单击结帐按钮后,什么也没有发生。等待了一段时间后,我检查了运行任务的日志,得到了以下输出:

[Nest] 28 - 06/01/2024, 4:54:13 AM ERROR [ExceptionsHandler] Request aborted due to timeout being reached (80000ms) 
Error: Request aborted due to timeout being reached (80000ms)   
at /app/node_modules/stripe/cjs/RequestSender.js:326:37 
at processTicksAndRejections (node:internal/process/task_queues:95:5)   

为了解决这个问题,我删除了负载均衡器,只在端口 5000 上运行一个 EC2 实例。我将任务定义中的网络模式从

awsvpc
更改为
bridge
并进行静态端口映射,然后运行单个任务。令我惊讶的是,前端可以无缝到达结帐端点。当我在 ECS 上启动服务时将 ALB 放置在 EC2 实例后面时,就会出现问题。

EC2 实例默认放置在公共子网中,以从 ECR 中提取镜像。因此,我认为问题一定与安全组有关。这是我的安全组配置:

ALB

入境规则

Inbound rules for the ALB's security group

出境规则

Outbound rules for the ALB's security group

EC2 实例

入境规则

Inbound rules for the EC2's security group

出境规则

Outbound rules for the EC2's security group

那么当 EC2 实例位于 ALB 之后时,有没有办法解决这个问题?

node.js stripe-payments amazon-elb aws-security-group
1个回答
0
投票

您的 ALB 似乎不允许从公共互联网连接到其端口 443 (HTTPS)。如果它不起作用,您将不得不分享您的 ALB 侦听器规则和目标组配置如何。

好处是底层EC2安全组的入站规则允许ALB的安全组。然而,由于整个端口范围都被开放,它太宽松了。

© www.soinside.com 2019 - 2024. All rights reserved.