我们设置了通配符来处理“example.com”的所有子域名
记录:*.example.com 指向 10.10.10.10
我们有一个更具体的 A 记录来处理特殊子域(这很好用):
A 记录:staging.example.com 指向 10.10.10.9
我们遇到的问题是我们正在将暂存区迁移到新的托管环境,并且我们被指示使用 CNAME:
CNAME:new-staging.example.com 指向 proxy.heroku.com
我们认为这可行。然而,new-staging.example.com 解析为顶级通配符 10.10.10.10,而不是指向 proxy.heroku.com。
我遗漏了什么?这不可能吗?或者这是不好的做法?谢谢,
答案1
答案通常是“否”——更具体的记录应该获胜,因此这应该如您所描述/预期的那样工作。我猜是您将通配符 A 记录缓存在某处,并且需要等待该缓存过期。
使用 BIND 9.6.2-P2/FreeBSD 8.1 进行快速测试:
包含以下记录的区域:
example.net. IN A 127.0.0.2
*.test.example.net. IN A 127.0.0.1
specific.test.example.net. IN CNAME example.net.
决议如下:
% dig specific.test.example.net
; <<>> DiG 9.6.2-P2 <<>> specific.test.example.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17222
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;specific.test.example.net. IN A
;; ANSWER SECTION:
specific.test.example.net. 3600 IN CNAME example.net.
example.net. 3600 IN A 127.0.0.2
;; AUTHORITY SECTION:
example.net. 3600 IN NS ns1.example.net.
;; ADDITIONAL SECTION:
ns1.example.net. 3600 IN A 127.0.0.1
(返回 CNAME)
和
% dig nonspecific.test.example.net
; <<>> DiG 9.6.2-P2 <<>> nonspecific.test.example.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26980
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;nonspecific.test.example.net. IN A
;; ANSWER SECTION:
nonspecific.test.example.net. 3600 IN A 127.0.0.1
;; AUTHORITY SECTION:
example.net. 3600 IN NS ns1.example.net.
;; ADDITIONAL SECTION:
ns1.example.net. 3600 IN A 127.0.0.1
(返回通配符A记录)
答案2
根据您对该问题的评论:
运行 dig -t ANY new-staging.example.com 时,我们得到:new-staging.example.com.82880 IN CNAME proxy.heroku.com.example.com.proxy.heroku.com.example.com.86400 IN A 10.10.10.10
...您的 DNS 配置错误。您需要将 CNAME 的目标设置为proxy.heroku.com.
- 最后的句点很重要!如果没有它,您的 DNS 服务器会假设您指的是example.com
区域内的主机 - proxy.heroku.com.example.com
- 而这会被通配符记录捕获。
答案3
我偶然发现了这篇文章,它研究了如何在共享的 Plesk Linux 服务器上实现这一点。在他们的示例中,他们提到了 DNS / vhost.conf 组合解决方案,您必须同时添加 vhost.conf 并更新 DNS。
引用:“它必须是子域名列表中的最后一个,按字母顺序排列,因此其名称以“zz”开头。 http://kb.parallels.com/2239
我的猜测是,这与“正常” DNS 理论不同,后者将返回更具体的记录。