![[AWS Technical Support Note]สรุปข้อจำกัดของโดเมน APEX และ CNAME record สำหรับ AWS Beginner](https://devio2024-media.developers.io/image/upload/v1754389928/user-gen-eyecatch/wtql9jswjda21b88hrj4.png)
[AWS Technical Support Note]สรุปข้อจำกัดของโดเมน APEX และ CNAME record สำหรับ AWS Beginner
ในบล็อกนี้ เราจะทบทวนข้อมูลพื้นฐาน เช่น "ซับโดเมนคืออะไร"
จากนั้นจึงมาพิจารณาว่าทำไมอาจจะเกิดปัญหาขึ้นได้เมื่อใช้ CNAME record กับโดเมน APEX
โดเมน APEX คืออะไร
เริ่มต้นด้วยหน้าตาของโดเมน APEX ที่มักจะมีลักษณะที่เรียบง่ายและดูสะอาดตา เช่น:
example.com
โดเมนที่ไม่มี "." และชื่อโฮสต์อยู่ทางด้านซ้ายของโดเมนที่เป็นของตัวเองเรียกว่าโดเมน APEX
ซึ่งอาจเรียกว่าโดเมนเปล่า หรือ Zone Apex ได้
เมื่อมี "." และชื่อโฮสต์อยู่ทางด้านซ้ายของโดเมนที่เป็นของตัวเอง จะกลายเป็นซับโดเมน
ในรูปแบบดังกล่าว สิ่งแรกที่น่าจะนึกถึงคือ www.example.com ใช่หรือไม่?
นี่เป็นโอกาสที่ดีที่เรามาทำความเข้าใจเกี่ยวกับนิยามของซับโดเมนกันใหม่อีกครั้ง
ซับโดเมนคืออะไร
ซับโดเมนถูกกำหนดใน RFC1034 ดังนี้
DOMAIN NAMES - CONCEPTS AND FACILITIES (English)
A domain is identified by a domain name, and consists of that part of
the domain name space that is at or below the domain name which
specifies the domain. A domain is a subdomain of another domain if it
is contained within that domain. This relationship can be tested by
seeing if the subdomain's name ends with the containing domain's name.
For example, A.B.C.D is a subdomain of B.C.D, C.D, D, and " ".
(แปลไทยโดย AI)
โดเมนถูกระบุโดยชื่อโดเมน และประกอบด้วยส่วนหนึ่งของพื้นที่ชื่อโดเมนที่อยู่ที่หรือต่ำกว่าชื่อโดเมนที่ระบุโดเมนนั้น โดเมนจะเป็นซับโดเมนของโดเมนอื่นหากหนึ่งหากอยู่ภายในโดเมนนั้น ความสัมพันธ์นี้สามารถทดสอบได้โดยการดูว่าชื่อซับโดเมนลงท้ายด้วยชื่อโดเมนที่บรรจุหรือไม่ ตัวอย่างเช่น A.B.C.D เป็น subdomain ของ B.C.D, C.D, D และ " "
ลองพิจารณาข้างต้นโดยใช้โดเมน example.com เป็นตัวอย่าง
โดเมนทั้งหมดด้านล่างนี้จะเป็นซับโดเมนของ example.com
finance.example.com
news.example.com
books.example.com
travel.example.com
stockmarket.finance.example.com
sports.news.example.com
food.books.example.com
domestic.travel.example.com
ในการสร้างซับโดเมน มักจะเพิ่ม "." ไว้ทางด้านซ้ายของโดเมน แล้วแบ่งย่อยตามประเภท ฯลฯ
โดยการเพิ่ม "." อีกตัวไว้ทางด้านซ้ายของซับโดเมน คุณยังสามารถสร้างซับโดเมนชื่อ food ภายในประเภทหนังสือ เช่น food.books.example.com ได้
หลังจากที่เราได้ดูคำจำกัดความของซับโดเมนแล้ว ต่อไปจะมาดูลักษณะเฉพาะของโดเมน APEX อีกครั้ง
เขียนโดเมน APEX ลงใน Zone File
หากคุณใช้โดเมน APEX และระบุที่อยู่ IP ทั่วโลกของโฮมเพจใน A record ไฟล์โซนจะมีรายละเอียดดังต่อไปนี้ (คร่าวๆ)
ประโยชน์อย่างหนึ่งของการใช้โดเมน APEX คือ คุณสามารถละเว้น www ได้ เมื่อเทียบกับการระบุ A record โดยใช้ซับโดเมน www.example.com ซึ่งจะทำให้ URL สั้นลง
คุณอาจคิดว่าการใช้เว็บไซต์ของพวกเขาด้วยโดเมน APEX น่าจะเป็นทางเลือกที่ดีกว่าใช่ไหม?
อย่างไรก็ตาม โดเมน APEX มีข้อจำกัดคือไม่สามารถใช้ CNAME record ได้
(ในความเป็นจริง เนื่องจากมีข้อจำกัดเกี่ยวกับ CNAME record คุณจึงไม่สามารถใช้ CNAME record กับโดเมน APEX ได้)
ดังนั้นโดเมน APEX ไม่สามารถใช้งานร่วมกับบริการต่างๆ เช่น บริการ CDN (Contents Delivery Network) ซึ่งให้บริการปลายทางเป็นชื่อ DNS แทนที่จะเป็น IP address
ก่อนที่จะตรวจสอบว่าโดเมน APEX สามารถใช้งานร่วมกับบริการ CDN ได้หรือไม่ มาดูข้อจำกัดของ CNAME กันก่อน
ข้อจำกัดของ CNAME
Request for Comments: 1912 (English)
A CNAME record is not allowed to coexist with any other data. In other words, if suzy.podunk.xx is an alias for sue.podunk.xx, you can't also have an MX record for suzy.podunk.edu, or an A record, or even a TXT record. Especially do not try to combine CNAMEs and NS records like this!:
แปลไทย
ไม่อนุญาตให้มี CNAME record อยู่ร่วมกับข้อมูลอื่นใด กล่าวอีกนัยหนึ่ง หาก suzy.podunk.xx เป็นนามแฝงของ sue.podunk.xx คุณจะไม่สามารถมี MX record สำหรับ suzy.podunk.edu, A record หรือแม้แต่ TXT record ได้ โดยเฉพาะอย่างยิ่ง อย่าพยายามรวม CNAME record และ NS record แบบนี้
หากพูดตามตรงแล้ว ตัวอย่างในเอกสาร RFC ค่อนข้างจะน่าสับสน แต่ถ้าจะให้เข้าใจง่ายๆ ก็คือ คุณไม่สามารถระบุประเภทของเรกคอร์ดอื่นที่มีชื่อเรกคอร์ดเดียวกันกับที่ใช้ใน CNAME record ได้
ตัวอย่างเช่น การลงทะเบียนชื่อซับโดเมน www.example.com เป็นเรกคอร์ด CNAME และการลงทะเบียนชื่อเรกคอร์ดเดียวกัน www.example.com เป็น A record ตามที่แสดงด้านล่าง ถือเป็นการละเมิด RFC 1912
จะเกิดอะไรขึ้นหากเราเพิ่ม CNAME records ลงในไฟล์โซนสำหรับโดเมน APEX ของ example.com?
อันที่จริง หากคุณลองเขียน CNAME record ในไฟล์โซนของโดเมน APEX คุณจะเข้าใจว่าทำไม CNAME record จึงไม่สามารถใช้ร่วมกับโดเมน APEX ได้
CNAME record ซึ่งไม่ควรอยู่ร่วมกับเรคคอร์ดอื่นๆ สามารถอยู่ร่วมกับ NS record, SOA record และอื่นๆ ในโดเมน APEX ที่ใช้ชื่อเรคคอร์ดเดียวกันได้
Alias Record
หลังจากที่พูดถึงเรื่องพื้นฐานไปยาวๆแล้ว ต่อไปเราจะมาดูการบันทึก Alias Record ของ Amazon Route 53 กัน
Choosing between alias and non-alias records (English)
Unlike a CNAME record, you can create an alias record at the top node of a DNS namespace, also known as the zone apex. For example, if you register the DNS name example.com, the zone apex is example.com. You can't create a CNAME record for example.com, but you can create an alias record for example.com that routes traffic to www.example.com (as long as the record type for www.example.com is not of type CNAME).
แปลไทย
ต่างจาก CNAME record คุณสามารถสร้าง alias record ที่ top node ของ DNS namespace ซึ่งเรียกอีกอย่างว่า zone apex ได้ ตัวอย่างเช่น หากคุณลงทะเบียนชื่อ DNS เป็น example.com แล้ว zone apex ก็คือ example.com คุณไม่สามารถสร้าง CNAME record สำหรับ example.com ได้ แต่คุณสามารถสร้าง alias record สำหรับ example.com ที่นำทราฟฟิกไปยัง www.example.com ได้ (ตราบใดที่ record type ของ www.example.com ไม่ใช่ประเภท CNAME)
จริงๆแล้วเราเข้าใจแค่ว่า alias record เป็นแค่เรคคอร์ดที่ใช้งานสะดวกกว่า CNAME record เฉยๆ แต่ปรากฏว่ามันยังช่วยแก้ไขข้อจำกัดของ CNAME record ที่ไม่สามารถใช้ร่วมกับเรคคอร์ดอื่นๆได้อีกด้วย
การสนับสนุน Cloudflare สำหรับโดเมน APEX
เราได้ลองศึกษาว่าบริการ CDN อื่นๆ หลีกเลี่ยงข้อจำกัด CNAME ได้อย่างไร
Cloudflare ใช้ฟีเจอร์ที่เรียกว่า CNAME Flattening เพื่อหลีกเลี่ยงข้อจำกัด CNAME และให้บริการ CDN สำหรับโดเมน APEX
URLに「WWW」が付かないサイトを作る場合の注意点 (Japanese)
CNAME Flatteningといって、DNS設定画面の見掛け上はCNAMEとなりますが、実際に動作はDNSクエリーの問い合わせ元に対してAレコードとして振る舞います。 応答するアドレスは転送先のFQDNの名前解決を再帰的に行い、返されたアドレスを問い合わせ元に返し、同時にCloudflare内にキャッシュします。
แปลไทย
เทคนิคที่เรียกว่า CNAME Flattening ซึ่งในหน้าจอการตั้งค่า DNS จะแสดงเป็น CNAME แต่ในการทำงานจริงจะทำตัวเป็น A record เมื่อตอบกลับไปยังแหล่งที่ส่ง DNS query มา
ที่อยู่ที่ตอบกลับจะได้มาจากการทำ name resolution แบบ recursive กับ FQDN ปลายทาง แล้วส่งที่อยู่ที่ได้รับกลับไปยังแหล่งที่สอบถาม พร้อมทั้งเก็บไว้ใน cache ของ Cloudflare ในเวลาเดียวกัน
สรุป
ถ้าถูกถามว่าทำไม APEX domain ถึงใช้ CNAME record ไม่ได้ น่าจะมีคนตอบได้ในทันทีไม่กี่คนหรอก
เรื่องพวกนี้แต่ละอย่างเป็นแค่การทบทวนพื้นฐานเท่านั้น หวังว่าบทความนี้จะมีประโยชน์สำหรับผู้อ่านทุกท่าน
บทความอ้างอิง
・【小ネタ】Route 53 のホストゾーンに CNAME レコードと重複するドメイン名で MX レコードを登録しようとしたらきちんと怒られた (Japanese)
・DOMAIN NAMES - CONCEPTS AND FACILITIES (English)
・Request for Comments: 1912 (English)
・URLに「WWW」が付かないサイトを作る場合の注意点 (Japanese)
บทความต้นฉบับ
[初心者向け] APEX ドメインと CNAME レコード制約についてまとめてみた (Japanese)