我在将应用程序部署到 AWS(更准确地说是基于 EC2 的 Elastic Beanstalk)时遇到了一个奇怪的问题。我们使用了某个 VOIP 提供商,其地址为vh1107.ipex.cz
。应用程序在本地主机上(甚至在不同的主机上)正常工作,但在 AWS 上却无法连接到此地址。当我登录到实例时也无法 ping 它,但是它可以 ping 我尝试的任何其他互联网地址。那么这里出了什么问题?这个地址可能在某个 AWS 黑名单上吗?
编辑
抱歉,我问错了问题。我知道 HTTP 和 ICMP 之间的区别,但问题是我可以从自己的机器上 ping 它,所以这意味着服务器监听 ICMP,问题出在 AWS 上。任何 HTTP 客户端也是如此,例如,curl vh1107.ipex.cz/calls -v
在我的计算机上运行良好,但请求在 AWS 上挂起。我们以前的托管也可以访问服务器。
答案1
该服务器不响应 ping 请求。Ping 使用 ICMP,而许多服务器的防火墙会阻止该协议。
更多的背景知识:ping 通过 ICMP 运行(阅读本文),与TCP 协议http/https 运行过度。
通常,允许人们 ping 网站不会给网站带来什么好处,而且允许用户访问网站或服务器的任何方式都会带来风险。除了来自一个指定的 IP 地址外,我不允许 ICMP 进入我的服务器。因为它们是独立的协议,所以很容易在防火墙处阻止 ICMP。这就是你无法 ping 某些服务器的原因。
更新
根据我们在评论中的对话,我可以确认服务器根据位置拒绝某些连接。从捷克共和国我可以连接(尽管 URL 无效),从新西兰或美国我无法连接。
我认为您需要不同的提供商、VPN 或提供商的合作。
答案2
您是否查看过 Elastic Beanstalk 应用程序正在使用的安全组?您需要确保安全组允许正确的入站流量。以下是来自 AWS 文档的摘录:
附加到实例的安全组决定哪些流量可以到达实例(入口),哪些流量可以离开实例(出口)。Elastic Beanstalk 会创建一个安全组,允许来自负载均衡器的 HTTP (80) 和 HTTPS (443) 标准端口上的流量。您可以指定已创建的其他安全组,以允许其他端口或其他来源的流量。例如,您可以为 SSH 访问创建一个安全组,允许来自受限 IP 地址范围的端口 22 上的流量进入,或者为了提高安全性,允许来自只有您才有权访问的堡垒主机的流量进入。