我有一个 Amazon ec2 实例,它有一个静态公共 IP 和一个由 Amazon 分配的公共域名(ec2-my-hosts-public-ip.compute-1.amazonaws.com。我们称之为 ec2.amazon.com)。
我有一个域名,example.com。在我的 DNS 中,我将 example.com 转发指向 www.example.com。
www.example.com 有一个指向我的 ec2 实例的公共 IP 的 A 名称记录。
在我的 ec2 实例上,我有两个 Web 文件夹:/var/www 和 /var/www-public。Apache vhosts 设置为将 www.example.com 指向 /var/www-public。默认情况下,vhosts 将 ec2.amazon.com 指向 /var/www。请欣赏这张小表格:
www.example.com --> /var/www-public
ec2.amazon.com --> /var/www
我想要为我的 ec2.amazon.com 地址取一个更短的别名(记住,它实际上是 ec2-my-hosts-public-ip.compute-1.amazonaws.com),因此我设置了一个 CNAME 记录以将 ec2.example.com 指向 ec2.amazon.com:
ec2.example.com CNAME ec2.amazon.com
但是,我遇到了一个问题。许多(可能是所有?)DNS 设置将通过简单地返回 ec2.amazon.com 的 IP 地址来响应对 ec2.example.com 的请求,就好像它刚刚找到了一个 A 名称记录一样,而客户端将无法分辨出其中涉及了别名。这是一个问题,因为浏览器发送到我的服务器的 HTTP 请求将域列为“ec2.example.com”而不是“ec2.amazon.com”,并且我的服务器没有为 ec2.example.com 设置 vhost,因此它默认转到错误的页面。
由于一些不太重要的原因,我无法更改此 apache 配置。仅使用 DNS 记录,我可以解决这个问题吗?理想的解决方案是让客户端(很可能是浏览器)以某种方式获知此别名,以便它可以在其 HTTP 请求标头中发送“ec2.amazon.com”。基本上,我希望它像 DNS 转发而不是普通的 CNAME 一样工作。我最初认为 PTR 记录看起来很有希望,因为根据 Wikipedia,“与 CNAME 不同,DNS 处理不会继续,只返回名称”,这正是我想要的(至少是返回名称的部分),但后来我发现 PTR 记录仅与反向 DNS 的 IP 地址相关联。
答案1
浏览器与 IP 地址通信,而不是域名。但为了定位到好的域名,它们会传递一个标头“Host: ec2.amazon.com”,这个值通常是地址栏中显示的值(或隐藏在 iframe 中)。如果您无法使用名称 ec2.example.com 配置虚拟主机,那么您应该做的是将其重定向到 longaddress.amazon.com,或者将 longaddress.amazon.com 嵌入 iframe。这是一个简单的重定向,不一定涉及 DNS 设置,并且 CNAME 不是解决方案。
因此,您必须在可以的地方托管 ec2.example.com,并且页面应包含包含 longaddress.amazon.com 的框架,或者页面应重定向(Meta 或 Location:标头)到 longaddress。