因此,我才刚刚开始真正关心 DNS 的实际工作方式,而不是插入东西并进行故障排除。我有一个应用程序,它会根据用户访问的域显示不同的信息。但是,我不太清楚它在我这边是如何工作的。
我脑子里有两个可能的解决方案:1. 我的 DNS 为每个实例创建一个新的 CNAME 2. 我使用通配符 *.mysite.com 保持 DNS 简单
这两种方式都可以吗?
- 这两种方式都可以吗?
- 关于选项 2,我是否能够知道用户来自哪个 CNAME,以便我可以显示正确的信息?
- 如果两者都可行,哪一个更好?
我的堆栈以 AWS 为中心,因此我使用 Route 53,如果我选择第一个选项,我将使用他们的 API。
答案1
我假设这是一个 Web 应用程序,并且这两种方法都可以。
假设您使用 CNAMES:
sitea.domain.com CNAME server.domain.com
siteb.domain.com CNAME server.domain.com
server.domain.com A 1.2.3.4
当您sitea.domain.com
在 Web 浏览器中输入时,您的 DNS 解析器将尝试获取 IP 地址,该地址将根据 CNAME 返回为1.2.3.4
。然后,浏览器将连接到1.2.3.4
并尝试检索网站sitea.domain.com
。
在 Web 服务器上,您可以为每个域配置不同的虚拟主机,或者可能更适合您的情况,有一个网站处理所有请求并使用HTTP_HOST
环境变量来确定用户输入了哪个主机名,并从中显示相关信息。
通配符可能会使您的应用程序更容易,因为您不需要在每次需要新主机名时添加更多 dns 条目。(您也可以将通配符设为直接指向 IP 的 A 记录,但这并没有太大区别):
*.domain.com A 1.2.3.4
或者
server.domain.com A 1.2.3.4
*.domain.com CNAME server.domain.com
其功能几乎完全相同 - 用户将网址输入xyz.domain.com
到网络浏览器中,网址被解析为1.2.3.4
,然后用户连接到1.2.3.4
该网站并请求xyz.domain.com