我正在将 Akka HTTP 应用程序迁移到 AWS,并被这个问题难住了。 Akka HTTP 服务器的启动方式如下:
Http().bindAndHandle(routes, "0.0.0.0", 5377)
EC2 实例使用 aws CLI 启动:
aws ec2 run-instances \
--count 1 \
--instance-type t2.micro \
--key-name variant-us-west-1 \
--region $region \
--subnet-id subnet-bc22ebda \
--security-group-ids sg-0901a32ad173d6aae \
--image-id ami-0911f75c0510b955d `#ubuntu-openjdk-17-jre-headless` \
--output text --query 'Instances[*].InstanceId'
所讨论的 AMI 是我的私有 AMI,除了 Java 和 AWS CLI 之外什么都没有。安全组
sg-0901a32ad173d6aae
为入站流量打开有问题的端口 5377:
但是,当我尝试从 AWS 之外的本地系统卷曲它时,出现错误:
curl http://3.101.78.138:5377
curl: (7) Failed to connect to 3.101.78.138 port 5377 after 19 ms: Couldn't connect to server
我认为请求到达服务器是因为
curl
很快就会失败。如果我更改为未打开的端口,则超时时间会更长。所以我怀疑我的 Akka HTTP 配置,但想不出任何东西。
提前非常感谢!
Tsal Troser 的评论让我走上了正轨。事实证明,Java 17 绑定了 IP6 地址,尽管我传递给 Akka“0.0.0.0”的接口是 IP4 接口。我不太了解这里的网络细节,但是将
-Djava.net.preferIPv4Stack=true
传递给运行时解决了我的问题。也谢谢 Gaston Schabas 的评论。