CNAME 記錄
規範名稱(CNAME)記錄是一種 DNS 資源記錄類型,它將一個網域名稱(別名)對應到另一個網域名稱(規範名稱)。當 DNS 解析器查詢具有 CNAME 記錄的網域名稱時,它會跟隨別名指向目標網域名稱,然後查找最終的 IP 位址。
How it works
CNAME 記錄從別名網域名稱指向「規範」網域名稱。與直接指向 IP 位址的 A 記錄不同,CNAME 建立一個重新導向到另一個網域名稱的別名。這允許多個主機名稱透過將它們全部指向單一規範名稱來解析到相同的 IP 位址。
當 DNS 解析器遇到 CNAME 記錄時,解析流程遵循以下步驟:
1. 對別名網域名稱發起 DNS 查詢(例如,
www.example.com)
2. 解析器找到指向規範名稱的 CNAME 記錄(例如,example.com)
3. 解析器重新開始對規範網域名稱的查詢
4. 它找到規範網域名稱的 A 或 AAAA 記錄
5. 最後,它將 IP 位址傳回給用戶端
簡而言之:CNAME → 規範名稱 → A(IPv4)或 AAAA(IPv6)記錄 → IP 位址。如果主機的 IP 位址發生變化,只需要更新根網域名稱的 DNS A 記錄。所有 CNAME 記錄,包括別名或子網域名稱的記錄,將在根網域名稱的 A 記錄更新時自動變更。Key Points
- CNAME 記錄必須始終指向另一個網域名稱,永遠不能直接指向 IP 位址
- 如果網域名稱有 CNAME 記錄,它在同一級別上不能有任何其他記錄類型(A、MX、TXT、NS、SOA)
- CNAME 記錄不能用於根網域名稱(@)- 只能用於子網域名稱
- 每個 CNAME 都會增加一個額外的 DNS 查詢步驟,這可能會略微影響解析時間
- 鏈式 CNAME(CNAME 指向 CNAME)在技術上是可能的,但由於效能影響不建議使用
Common Use Cases
- 子網域名稱別名: 將
www.example.com和blog.example.com指向example.com,後者擁有實際的 A 記錄 - 第三方服務整合: 將您的子網域名稱指向第三方服務,例如
shop.example.com→shops.shopify.com - CDN 設定: 將您的網域名稱指向 CDN 端點(例如,
cdn.example.com→d111111abcdef8.cloudfront.net) - 集中管理: 透過僅更改一個規範 A 記錄來更新多個子網域名稱,而不是單獨更新每個子網域名稱
code 設定範例
| Type | Host / Name | Value / Points to | TTL |
|---|---|---|---|
| A | @ | 192.0.2.1 | 3600 |
| CNAME | www | example.com | 3600 |
| CNAME | blog | example.com | 3600 |
| CNAME | shop | shops.myshopify.com | 3600 |
* CNAME 記錄建立指向其他網域名稱的別名。目標網域名稱必須有 A 或 AAAA 記錄。
Frequently Asked Questions
A 記錄和 CNAME 記錄有什麼區別?expand_more
A 記錄將主機名稱直接指向 IP 位址,而 CNAME 記錄將主機名稱指向另一個主機名稱。A 記錄提供直接的 IP 對應,而 CNAME 建立別名。對根網域名稱使用 A 記錄,以及當您需要直接指向 IP 時使用 A 記錄。當您希望子網域名稱跟隨另一個網域名稱的 IP 位址時,對子網域名稱使用 CNAME。
我可以為根網域名稱使用 CNAME 嗎?expand_more
不可以,根據 RFC 1912,CNAME 記錄不能用於根(頂點)網域名稱。根網域名稱必須使用 A 或 AAAA 記錄。這是因為 CNAME 記錄與必須存在於根級別的其他基本記錄(如 SOA 和 NS)不相容。您只能對子網域名稱使用 CNAME。
CNAME 可以指向另一個 CNAME 嗎?expand_more
雖然在技術上是可能的,但強烈不建議鏈式 CNAME(CNAME 指向 CNAME)。鏈中的每一跳都會增加一次額外的 DNS 查詢,增加解析時間並可能影響效能。大多數 DNS 提供商和最佳實踐建議避免 CNAME 鏈,並直接指向規範網域名稱。
我可以在 CNAME 旁邊設定其他記錄嗎?expand_more
不可以,如果主機名稱有 CNAME 記錄,它在同一級別上不能有任何其他記錄類型(A、AAAA、MX、TXT 等)。這是一個基本的 DNS 規則(RFC 1034)。如果您需要為同一主機名稱設定多個記錄類型,請使用 A 或 AAAA 記錄而不是 CNAME。
我應該在什麼時候使用 CNAME 而不是 A 記錄?expand_more
在以下情況下使用 CNAME:
- 將子網域名稱指向另一個網域名稱(特別是第三方服務)
- 您希望目標網域名稱的 IP 更改自動套用到別名
- 管理多個應該全部指向相同目標的子網域名稱
在以下情況下使用 A 記錄:
- 設定根網域名稱
- 您需要盡可能快的 DNS 解析
- 您需要為同一主機名稱設定其他記錄類型(MX、TXT)