V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
rebeccaMyKid
V2EX  ›  问与答

CNAME 和子域名到底什么关系?一头雾水

  •  
  •   rebeccaMyKid · 2017-08-07 16:41:02 +08:00 · 4048 次点击
    这是一个创建于 2456 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假如我买个域名,aaa.com ,那剩下的 a.b.c.d.aaa.com 应该都可以我可以自己配置的吧。

    A 记录是不是只能将这个 aaa.com 指向 一个 IP 地址,那 A 记录只可能会有 1 条吧?

    要设置子域名就必须设置 CNAME 是吗?而且 CNAME 必须指向域名而不能指向 IP。

    test.aaa.com -> aaa.com

    blog.aaa.com -> aaa.com

    test.aaa.com 最终是当作 aaa.com 来解析的话,web 服务器怎么知道我访问的是 test.aaa.com 呢?

    19 条回复    2017-08-07 21:15:13 +08:00
    wildcat007
        1
    wildcat007  
       2017-08-07 16:44:06 +08:00
    多个子域名可以指定到同一个 IP。多个不同的域名也可以指定到同一个 IP。
    wildcat007
        2
    wildcat007  
       2017-08-07 16:44:49 +08:00
    去掉假如!
    自己去买个廉价域名,搭建一个 centos 7.x,用上 nginx 就会了。多动手试试
    zhoulouzi
        3
    zhoulouzi  
       2017-08-07 16:47:33 +08:00
    DNS 和 HTTP 是 2 个协议。web 服务器并不能干涉你的 DNS 解析过程。 子域名并不是必须设置 CNAME。
    fffflyfish
        4
    fffflyfish  
       2017-08-07 16:51:18 +08:00
    子域名可以指向同一个 ip 下的不同端口,可以反向代理端口,也可以指向 www 下不同的目录,我记得要在 apache2 这类下设置
    580a388da131
        5
    580a388da131  
       2017-08-07 16:51:43 +08:00
    简单来说就是:没什么关系。
    DNS 最终解析出来的都是 IP,服务器并不知道是 A 记录还是 CNAME 记录。
    rebeccaMyKid
        6
    rebeccaMyKid  
    OP
       2017-08-07 16:55:31 +08:00
    @wildcat007 老哥我在网上搜了 1 个多小时都没看明白,没几篇说得明白得,加我个微信,50 块包教会行不行。微信:maverlous2016
    isCyan
        7
    isCyan  
       2017-08-07 16:58:49 +08:00   ❤️ 1
    第一行:是的,可以配置。
    第二行:不是,可以有很多条。到最后会选择其中一个 ip 访问。
    问:要设置子域名就必须设置 CNAME 是吗?
    答:不是,所有记录都可以。
    CNAME 必须指向域名而不能指向 IP:是的,如果指向 ip 应该是 a 记录或者 ipv6 的 aaaa 记录
    最后的问题:
    假设你给 aaa.com 设置了 a 记录指向 233.233.233.233
    test.aaa.comblog.aaa.com 又设置了 cname 指向 aaa.com
    那么这两个子域名在解析时会发现设置了 cname 所以不能直接获得 ip 又会去解析一次 aaa.com 从而获得 233 这个 ip 地址作为服务器地址。
    dns 这个过程唯一的目的就是拿到了一个 ip,就结束使命了。
    而你的浏览器在拿到 ip 之后,如果你访问 test.aaa.com 那么 HTTP 协议的请求 Header 会有一个 "Host: test.aaa.com" 发送给你的 ip 的 web 服务器,web 服务器就知道你要访问的是 test 而不是 blog
    isCyan
        8
    isCyan  
       2017-08-07 16:59:39 +08:00
    @rebeccaMyKid #6 我包教会你
    rebeccaMyKid
        9
    rebeccaMyKid  
    OP
       2017-08-07 17:02:34 +08:00
    @isCyan 老哥加我微信
    isCyan
        10
    isCyan  
       2017-08-07 17:04:15 +08:00
    @rebeccaMyKid #9 该用户不存在,微信号发错了吧
    rebeccaMyKid
        11
    rebeccaMyKid  
    OP
       2017-08-07 17:05:55 +08:00
    @isCyan 关了所有添加方式。。。现在开了,不好意思
    pqee
        12
    pqee  
       2017-08-07 17:23:03 +08:00 via Android
    回答:没关系
    Kilerd
        13
    Kilerd  
       2017-08-07 19:31:52 +08:00
    多看书少看报,多写代码少思考。

    自己动手试试不久知道了?
    qucklay
        14
    qucklay  
       2017-08-07 19:57:32 +08:00 via iPhone
    A 是 Address cname 是 canonical name,字如其义,前者对应地址后者对应域名
    rebeccaMyKid
        15
    rebeccaMyKid  
    OP
       2017-08-07 21:02:02 +08:00
    @Kilerd 看了啊,搜了啊,问问题别觉总觉得别人没思考好么。
    chinvo
        16
    chinvo  
       2017-08-07 21:10:55 +08:00
    @rebeccaMyKid 所以自己试试呗

    任何子域名都可以支持任何类型解析,包括你说的 aaa.com 其实都是 @.aaa.com 子域名(这种又被称作裸域名
    shansing
        17
    shansing  
       2017-08-07 21:13:11 +08:00
    子域名只要设置好 hostname 就行了。
    rebeccaMyKid
        18
    rebeccaMyKid  
    OP
       2017-08-07 21:15:05 +08:00
    @chinvo 嗯,我已经懂了,谢谢各位
    akira
        19
    akira  
       2017-08-07 21:15:13 +08:00
    cname 和子域名没有关系,2 个完全不同的概念来的。

    谁告诉你子域名必须做 cname 的?前提就已经错了,后面都不用看了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1083 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:34 · PVG 02:34 · LAX 11:34 · JFK 14:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.