我们在 Amazon 上运行着一个 EC2。它有一个公共 IP和公共 DNS。
我们通过为 www.example.com 创建 A 记录,在域记录中使用公共 IP。然后该网站即可访问。如果我们要使用公共 DNS,我们将使用 CNAME 而不是 A 记录。
我的问题是关于两者的技术性和功能性。其中一个比另一个有优势吗?
答案1
在许多情况下,没有理由使用 CNAME。您有一个公共 IP 地址,因此请将 A 记录指向您的 IP 地址,以避免 CNAME 所需的第二次查找。此外,对于example.com
(no www
),当直接指向未使用 Elastic Load Balancer (ELB) 或 CloudFront 作为前端的 EC2 实例时,A 记录是您的唯一选择。
例外:
对于域内的主机名(例如www
),如果您希望 AWS 账户(位于同一区域)中的实例能够使用外部主机名但使用内部 IP 地址访问实例,则使用 CNAME 会很有用。当您使用 CNAME 时,EC2 基础设施会自动执行此操作。
例如:
www.example.com CNAME ec2-203-0-113-25.compute-1.amazonaws.com.
如果在您的 EC2 区域和账户之外进行查询,www.example.com 将返回实例的公共 IP 203.0.113.25。
如果在您的 EC2 区域和账户内查询,www.example.com 将返回实例的私有 IP 地址,例如 172.31.1.20。
我们将外部 DNS 主机名解析为实例网络外部的实例公共 IP 地址,以及实例网络内部的实例私有 IP 地址。
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html
这种自动映射可让您在内部机器使用公共主机名访问其他内部机器时节省数据传输费用。如果该访问使用公共 IP、弹性 IP 或 NAT 网关,您将需要为发送流量并再次发送流量支付额外费用,而这可以避免这种情况。