更改 s3 存储桶目标 IP 地址后刷新 DNS

Refreshing DNS after changing s3 bucket target IP address

我有一个 EC2 实例,本地端口 8501 托管一个网站 app.py。

为了访问 public,我在属性对话框中创建了一个指向 ipaddress:port 的 S3 存储桶,并使用 Route53 指向 s3 存储桶。

但是,当我更新我的 EC2 实例时,IP 地址发生了变化。我更新了 S3 目标,它适用于所有新用户,但之前使用过我的网站的任何人都被重定向到旧 IP 地址。

是否可以将它指向旧用户的新 IP 地址而不要求他们清除缓存?

在我看来,有更好的方法可以实现您的需求。

  1. 为实例分配弹性 IP (EIP)。如果您重新启动或什至停止然后启动您的实例,弹性 IP 不会改变。如果您将实例替换为另一个实例,您只需将 EIP 重新分配给新实例即可。

  2. 启动应用程序负载均衡器 (ALB) 并将您的实例附加到它。 ALB 将负责将流量路由到实例,无论它具有什么 IP。该实例甚至不必具有 public IP,内部 IP 就足够了。

  3. 考虑使用 Elastic Beanstalk。此服务将为您跨越 EC2 实例和负载均衡器。

如果您更改了前端资产或 html 文件中的 IP 地址(因为它们是 S3 对象,您将拥有),那么该资产可能会为某些用户缓存。可以通过检查相关资产返回的 headers 来观察缓存的长度。

关于未来的预防措施,避免您无法控制的“硬编码”资产。最终 IP 可以更改(您可以 attach an elastic IP address 来防止这种情况)如果您使用 EC2,您可能希望在将来更改它,这意味着使用多个主机或者您使用另一项服务再次需要更改它在你的代码中。

相反,您应该为资产中包含的主机创建一个 DNS 主机名,因为此 DNS 主机名不太可能更改(除非您决定自己更改)。创建 A 记录并将其分配给您的 EC2 实例 IP 后,您应该更新您的资产,此过程只需要完成一次。

如果将来您决定更改目标,您只需更新 DNS 主机名以指向其他服务即可。这不需要对资产本身进行任何更改,这意味着一旦 DNS 缓存被清除,它将以您的新服务为目标。