想问下域名CNAME记录的实际应用

发布于 2022-09-30 23:09:45 字数 370 浏览 35 评论 0

假设我有一个域名test.com,当用户在我的网站注册一个账号后,假设用户名为tom,那么默认给他分配一个专属的地址https://tom.test.com,如果用户有一个自己备案的域名tom.com,他把blog.tom.com做一个cname解析到tom.test.com,这样他访问自己的域名就是这样的

blog.tom.com->tom.test.com->服务器ip->程序

请问我的程序获取到主机名(域名)是什么?

我怎么判断他的域名备案了,在哪里查询,需要非常稳定的接口。

去哪里查询用户做了cname记录了。

如何防止乱cname?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

江心雾 2022-10-07 23:09:45
  1. 程序看到的是blog.tom.com,注意cname只是DNS解析级别的处理,并不是301/302/307/308这样的跳转用户的地址,所以程序看到的和地址栏一致,就是blog.tom.com
  2. 站长工具有免费额度的API可以调用,如果次数不够,可以付费购买: https://api.chinaz.com/ApiDet... 另外聚合数据记得也有,也是付费的,相对可靠。通常备案查询查询次数不会太多,建议你做二级缓存以便减少API调用次数
  3. 任何一个DNS解析工具都可以发现,比如dig, nslookup, host命令,如果你期望编程实现,那么各大编程语言提供的DNS API接口都可以解析域名,比如java自带的InetAddress就有解析域名的功能: https://developer.aliyun.com/...

    # dig 查询示例
    $ dig www.baidu.com
    
    ; <<>> DiG 9.16.1-Ubuntu <<>> www.baidu.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22281
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 65494
    ;; QUESTION SECTION:
    ;www.baidu.com.            IN    A
    
    ;; ANSWER SECTION:
    www.baidu.com.        609    IN    CNAME    www.a.shifen.com.  #<===== 已经看到cname了
    www.a.shifen.com.    85    IN    A    180.101.49.11
    www.a.shifen.com.    85    IN    A    180.101.49.12
    
    ;; Query time: 0 msec
    ;; SERVER: 127.0.0.53#53(127.0.0.53)
    ;; WHEN: Tue Sep 28 01:05:57 CST 2021
    ;; MSG SIZE  rcvd: 101
    
    # 仅返回cname记录,不再进一步解析
    $ dig www.baidu.com cname +short
    www.a.shifen.com.
    
    # nslookup示例
    $ nslookup www.baidu.com
    Server:        127.0.0.53
    Address:    127.0.0.53#53
    
    Non-authoritative answer:
    www.baidu.com    canonical name = www.a.shifen.com.   #<=== cname记录在这里
    Name:    www.a.shifen.com
    Address: 180.101.49.11
    Name:    www.a.shifen.com
    Address: 180.101.49.12
    
    # 仅显示cname记录
    $ nslookup -q=cname www.baidu.com
    Server:        127.0.0.53
    Address:    127.0.0.53#53
    
    Non-authoritative answer:
    www.baidu.com    canonical name = www.a.shifen.com.
    
    # host示例
    $ host www.baidu.com
    www.baidu.com is an alias for www.a.shifen.com.  <==== cname
    www.a.shifen.com has address 180.101.49.12
    www.a.shifen.com has address 180.101.49.11
    
    # 仅看cname
    $ host -t cname www.baidu.com
    www.baidu.com is an alias for www.a.shifen.com.
  4. 由于CNAME不会影响浏览器的地址栏,因此只要通过host头做白名单判断即可,比如nginx中基于域名的虚拟主机就相当容易实现这一点:

    server {
     server_name *.tom.com a.example.com b.example.com .....;
     ... SNIP ...
    }
    
    server {
     server_name _;
     return 403;
    }
记忆で 2022-10-07 23:09:45

我配置了CNAME 不知道为什么网站打不开了显示错误 {"error":"Document not found"}

我懵逼了 问了客服客服这样回答
您好,域名绑定到存储空间,是对存储空间资源加速,要在空间复制外链才可以访问,默认直接访问是 显示资源不存在 符合预期

如果域名之前绑定在网站,建议绑定一个其他的域名到存储空间,直接用网站域名绑定存储,会导致网站无法访问

这怎么解决啊 大哥

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文