我在 gandi.net 上有一个 SimpleHosting 实例,与 Gandi 的一个域名相连,mygandidomain.org
还有另一个在其他地方注册的域名myrootdomain.name
。
我成功地在我myrootdomain.name
的 DNS 记录中添加了一个 CNAME 条目,让一个子域subdomain.myrootdomain.name
指向我在 Gandi 的 SimpleHosting 实例,即:
subdomain 10800 IN CNAME mygandidomain.org.
现在当我使用subdomain.myrootdomain.name
Google Chrome 时,我收到一条错误消息:“错误 404 Vhost 未知”。此错误消息来自 Gandi,而不是我的其他域名注册商。因此我得出结论,CNAME 条目已生效。
但是,为了解决这个错误,我事后才阅读说明。Gandi 给出的说明告诉我应该执行以下操作:
Gandi 的说明说我应该将其指向gpaas12.dc2.gandi.net.
,即
添加 CNAME 行
subdomain 10800 IN CNAME gpaas12.dc2.gandi.net.
代替
subdomain 10800 IN CNAME mygandidomain.org.
... 并且,为了授权自己作为域名所有者,我应该删除其中任何一个吗?我应该保留哪一个,以符合 Gandi 的指示:
@ 10800 IN TXT“test=s0m3r4nD0mG!bB3ri$hStr1nG” 我还应该添加一个 TXT 条目:
@ 10800 IN TXT "test=s0m3r4nD0mG!bB3ri$hStr1nG"
使用 Gandi 提供的一些乱码随机字符串。
所以我这样做了。由于我无法直接输入这些行,而必须使用一些输入 Web 界面,因此我输入了一次带引号和一次不带引号的 TXT 条目值,并且针对子域(输入subdomain.myrootdomain.name.
到“host”输入字段)和根域(输入myrootdomain.name.
到“host”输入字段)都输入了引号,只是为了确保万无一失,因为我不允许在该输入字段中输入“@”或“*”。
我将所有添加和更改的 DNS 条目的 TTL 都改为 300。所以它们早就应该更新了。但挖掘时仍然会发生以下情况:
$ dig txt subdomain.myrootdomain.name
; <<>> DiG 9.10.3-P4-Ubuntu <<>> txt subdomain.myrootdomain.name
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50813
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;subdomain.myrootdomain.name. IN TXT
;; ANSWER SECTION:
subdomain.myrootdomain.name. 3599 IN CNAME mygandidomain.org
mygandidomain.org. 10799 IN TXT "v=spf1 include:_mailcust.gandi.net ?all"
;; Query time: 52 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Wed Jul 11 05:42:59 CEST 2018
;; MSG SIZE rcvd: 85
因此 CNAME 仍然指向mygandidomain.org
,看起来,就像我在一开始设置的那样(在将其更改为 之前gpaas12.dc2.gandi.net.
)
我不知道这是否不好,因为如果我理解正确的话,mygandidomain.org
反过来应该指向托管实例gpaas12.dc2.gandi.net
。(而且我实际上可以通过访问我的 Gandi 托管网站mygandidomain.org
)
subdomain.myrootdomain.name
不过,我认为我现在应该可以看到我添加的任何 TXT 条目。
如果我理解正确的话:
;; QUESTION SECTION:
;subdomain.myrootdomain.name. IN TXT
...这意味着有一个 TXT 条目subdomain.myrootdomain.name
但是是空的?
看起来这里的 Gandi 域的 DNS 条目中只有一个非空的 TXT 条目:
;; ANSWER SECTION:
subdomain.myrootdomain.name. 3599 IN CNAME mygandidomain.org
mygandidomain.org. 10799 IN TXT "v=spf1 include:_mailcust.gandi.net ?all"
...,这与我应该添加的 TXT 条目无关myrootdomain.name
。
我确实添加了具有提供的字符串值的指定 TXT 条目,一次带引号,一次不带引号,包括myrootdomain.name
和subdomain.myrootdomain.name
。
对于挖掘的 TXT 条目,结果相同myrootdomain.name
(我认为 TXT 条目应该在这里,按照 Gandi 的说明):
;; QUESTION SECTION:
;myrootdomain.name. IN TXT
只有一个空的 TXT 条目?现在更改应该还没生效吧?
我还多次刷新了 Google 公共 DNS (8.8.8.8) 中的 CNAME 和 TXT 条目,通过以下界面https://developers.google.com/speed/public-dns/cache,对于myrootdomain.name
和都适用subdomain.myrootdomain.name
。我在此机器上使用 Google DNS 服务器作为主 DNS。
当我使用 Google Chrome 访问 时subdomain.myrootdomain.name
,仍然会收到错误“Error 404 Vhost unknown。” - 从 DNS 挖掘结果来看,这可能是意料之中的。此错误消息来自 Gandi,因此至少 CNAME(无论是 togpaas12.dc2.gandi.net
还是 to mygandidomain.org
)已在那里生效。我猜只有 TXT 条目(应该有助于授权域所有权)仍未被识别。
然而,奇怪的是,当我使用subdomain.myrootdomain.name
Firefox 时,我仍然会收到非 Gandi 域名提供商发出的旧错误消息:“此地址下未配置任何网站”。
我的 TXT 条目输入有问题吗?正如我所说,我添加了 both subdomain.myrootdomain.name
(这可能不符合 Gandi 的说明)和 to myrootdomain.name
(这可能符合 Gandi 的说明),只是因为我无法输入“@”或“*”,并且想确保我包含了预期的条目。我还添加了它们两次,一次包含引号,一次不包含引号,假设 Gandi 只会选择正确的条目。
我应该删除其中任何一个吗?我应该保留哪一个,以符合 Gandi 的指示:
@ 10800 IN TXT "test=s0m3r4nD0mG!bB3ri$hStr1nG"
我看不到我的输入实际上是如何转换成这些文本行的。
$ dig ....
但到目前为止,它们似乎都没有在执行时出现。我在执行时不应该看到它们出现$ dig ...
吗?正如我所说,TTL 是 300(最初更长),我执行了 Google DNS 刷新操作。
感谢您提供的关于如何解释此处发生的事情的任何提示和建议。
编辑:现在可以正常工作了。不太确定,但我的直觉是,我为 添加的额外 TXT 条目subdomain.mydomain.name.
与 的 CNAME 有冲突subdomain.mydomain.name.
。手册上说只为 和 添加 TXT,mydomain.name.
而不为subdomain.mydomain.name.
,但正如我所解释的,我“只是为了确保万无一失”都添加了。我不太确定这是否起了作用,但这是我最后更改的,现在它可以正常工作了。
答案1
这个相当长的问题是 Server Fault 上多次出现的常见误解的集合。此外,像这样的问题通常会得到更详细的答案,我们可以用实际的域进行测试。我希望你在阅读完这些内容后能更好地理解这里发生的事情:
当我使用
subdomain.myrootdomain.name
Google Chrome 时,仍然收到错误“错误 404 Vhost 未知。” - 从 DNS 挖掘结果来看,这可能是意料之中的。这与 DNS 无关:您看到 Gandi 的页面表明 DNS 已指向他们的服务器,但他们的 Web 服务器未配置为识别它。要链接域名,您首先需要从实例控制面板向您的实例添加虚拟主机。
第二步不在 Gandi 的域名
CNAME
是在子域名中添加 并在域名顶点处添加TXT
:@ IN TXT
相当于myrootdomain.name. IN TXT
。正如您从手册中看到的那样,此TXT
记录的形式似乎是subdomain=hash
。如果您的给定记录实际上有test=s0m3r4nD0mG!bB3ri$hStr1n
,则可能是test.myrootdomain.name
而不是subdomain.myrootdomain.name
。在这种情况下,您需要从头开始添加您计划使用的确切子域名。;; QUESTION SECTION: ;subdomain.myrootdomain.name. IN TXT
...这意味着 subdomain.myrootdomain.name 有一个 TXT 条目,但是它是空的?
不,这是问题部分显示您要查找的内容。它不是空的,只是没有结果。结果位于答案部分. 而且它不为空:
;; ANSWER SECTION: subdomain.myrootdomain.name. 3599 IN CNAME mygandidomain.org mygandidomain.org. 10799 IN TXT "v=spf1 include:_mailcust.gandi.net ?all"
我将所有添加和更改的 DNS 条目的 TTL 更改为 300。所以它们应该早就更新了。
查询缓存时间为
TTL
秒。如果您之后更改 TTL 时间,则不会影响已缓存的查询。它最初缓存时间为10800
秒,即 3 小时,其中这3599
秒是上次编辑您的问题时剩余的。如果你需要检查记录是否在你的权威性名称服务器,您必须直接对它们执行查询(用
NS
您的实际域名替换):dig subdomain.myrootdomain.name A @authoritative1.example.com dig myrootdomain.name TXT @authoritative1.example.com
如果你
TXT
在已经有记录的子域上添加记录CNAME
,则它不起作用是正常的:它会显示TXT
来自正典名称,就像您的结果一样。如果主机名有记录CNAME
,则它不能有其他类型的资源记录。想知道为什么吗?我有一个回答,AndrewB 甚至更详细地介绍了典型问题。