我正在编写一个应用程序,让用户可以在他们的域上托管我们的页面。为此,他们需要在他们的 DNS 中配置几个记录。一个是具有唯一值的 TXT 记录,仅用于证明所有权。另一个用于将流量引导到我们的网站,为此我们有三个选项。
CNAME 记录可以工作,但不能与 TXT 记录结合使用(根据 RFC,CNAME 必须是唯一的记录)。A 记录可以工作,并且也允许使用 TXT 记录,但我们希望避免直接使用 IP,因为这样很难迁移到其他 IP。
因此,我们正在研究指向我们 DNS 的 NS 记录。问题是,虽然可以配置一个同时具有 NS 记录和 TXT 记录的域,但当您在原始域上查询 TXT 记录时,您什么也得不到,我认为这是因为 NS 记录。TXT 记录查询命中客户的域,该域显示“我的名称服务器在那里”,而该名称服务器没有 TXT 记录。
有没有办法将 NS 记录和 TXT 记录合并到一个域上,并且仍然能够从原始服务器获取 TXT 记录的值?
答案1
这是我最终为 Gitlab Pages 做的事情。可能适用于 heroku,也可能适用于您的应用程序 @MikeSnare。Necro,但在这里发布它是因为 Gitlab Page 的解决方案不太理想,而且谷歌搜索没有任何帮助。
挑战:
- 用于所有权验证的 TXT 记录:您需要在自己的子域上发布一条 TXT 记录,并分配一些预期的唯一字符串。对于 gitlab,如下所示
yourapp.example.com. TXT unique_nonsense_here
- 弹性域查找:您不能将
CNAME
与TXT
记录相结合,并且使用ALIAS
会泄露您的整个域(无意义)。A
记录很脆弱,并且NS
正如您所指出的,记录不会将您的TXT
记录传播到原始域。
动态 DNS 作为解决方法
- 动态 DNS 设置:为您的子域名配置动态 DNS 记录。
- CI/CD 管道或脚本:设置 CI 管道或脚本以定期查询远程子域的 IP,并使用 ddns 凭据更新动态 DNS 记录。(例如,对于
yourapp.example.com CNAME yourapp.gitlab.io.
,您可以像 一样dig yourapp.gitlab.io A
将生成的 A 记录发布为 的 IPyourapp.example.com
) - 验证和测试:确保 TXT 记录对于域验证仍然有效,并且子域正确解析为您托管的内容的 IP。