【问题标题】:Access Amazon EC2 instance only from ELB仅从 ELB 访问 Amazon EC2 实例
【发布时间】:2018-03-26 19:33:24
【问题描述】:

我在 EC2 实例上部署了一个简单的网站,并创建了一个弹性负载均衡器,将流量路由到这个 EC2 实例。

我还在我的 DNS 注册器上创建了 CNAME 记录,将我的域 (www.example.com) 指向负载均衡器 DNS 名称 (load-balancer-1234567890.us-east-1.elb.amazonaws.com)。

我可以通过 3 种不同的方式在浏览器中成功访问我的网站:

  • EC2 实例公网 IP(例如:54.89.99.99)
  • ELB 公共 DNS 名称(例如:load-balancer-1234567890.us-east-1.elb.amazonaws.com)
  • 我的域 DNS(例如:www.example.com)

但是,出于安全原因,我希望我的 EC2 实例只能从负载均衡器通过端口 80 访问。

所以,我更改了 EC2 实例的安全组:

  • 删除了允许所有来源 (0.0.0.0/0) 端口 80 上的流量的规则
  • 添加了一条规则以允许来自我的 VPC (172.31.0.0/16) 的端口 80 上的流量
  • 添加了一条规则以允许来自 ELB 安全组 (sg-xxxxxxxx) 的端口 80 上的流量

之后,我仍然可以从 ELB DNS 名称访问我的网站,但现在我无法再从我的域 (www.example.com) 访问。我收到错误:ERR_CONNECTION_TIMED_OUT。

怎么了?

【问题讨论】:

  • 您在访问 www.example.com 时遇到什么错误?
  • 浏览器中的错误是:ERR_CONNECTION_TIMED_OUT
  • 你在用 Route53 做 DNS 吗?
  • 这似乎是您机器中 DNS 的缓存问题。在 Windows 中为您的域尝试 traceroute www.example.com 或 tracert www.example.com,看看它是否到达 ELB?您还可以在 Windows 中使用 ipconfig /displaydns 检查缓存条目。您也可以尝试刷新机器中的 DNS 记录(命令因操作系统而异)
  • 那么 DNS 没有完全传播。根据先前记录集的ttl放置可能需要一些时间,直接将ip映射到域。

标签: amazon-web-services amazon-ec2 dns amazon-elb aws-security-group


【解决方案1】:

这似乎是您的机器或 DNS 服务器中的 DNS 缓存问题。

  • 要清除计算机中的缓存,请使用 ipconfig /flushdns 刷新 DNS
  • 如果问题仍然存在,请尝试 traceroute www.example.com(或 Windows 中的 tracert www.example.com)查看它是否到达 ELB。如果源 IP 与当前 DNS 配置不同,
    • 可能是由于配置错误(仔细检查)
    • 如果没有传播最新的 DNS 修改(如果它指向以前的配置),则等待一段时间,直到 DNS 服务器根据 TTL 值清除缓存。

【讨论】:

    【解决方案2】:

    创建负载均衡器时,您需要选择负载均衡器所在的可用区。这意味着您的负载均衡器位于您的 VPC 内,而不是在 VPC 之外(这是正常的和预期的)。

    由于您的安全组允许来自您的 VPC 内的流量(这与 ELB 安全组重复,因为两者都允许流量),因此您的安全组设置有问题或负载均衡器配置错误。还要仔细检查负载均衡器安全组设置。

    【讨论】:

    • 这似乎是一个 DNS 传播问题(检查有问题的 cmets),看看您是否可以提供帮助。
    猜你喜欢
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多