เว็บนี้มีลิงก์ affiliate — หากสมัครผ่านลิงก์ เราได้รับค่าคอมมิชชัน · Affiliate links.

คู่มือ DigitalOcean Spaces CDN 2026 — เร่งความเร็วเว็บไซต์

A practical guide to configuring DigitalOcean Spaces CDN endpoints, custom subdomains, and cache purge/TTL management for faster static asset delivery.

คู่มือ DigitalOcean Spaces CDN 2026 — เร่งความเร็วเว็บไซต์

DigitalOcean Spaces มาพร้อมกับ CDN ในตัวที่เปิดใช้งานได้ทันทีโดยไม่ต้องพึ่งบริการภายนอก ช่วยลดเวลาโหลดไฟล์ static อย่างรูปภาพ วิดีโอ และไฟล์ดาวน์โหลดสำหรับผู้ใช้งานทั่วโลก บทความนี้เจาะลึกเฉพาะฟีเจอร์ CDN ตั้งแต่การเปิดใช้งาน endpoint การผูก custom subdomain พร้อม SSL ไปจนถึงการจัดการ cache purge และ TTL ที่หลายคนมักตั้งค่าผิดพลาด

Spaces CDN คืออะไร ทำงานร่วมกับ Object Storage ยังไง

Spaces คือบริการ Object Storage ของ DigitalOcean ที่เข้ากันได้กับ S3 API ใช้เก็บไฟล์ static เช่น รูปภาพ วิดีโอ ไฟล์ backup หรือไฟล์ดาวน์โหลดต่างๆ โดยทุก Space ที่สร้างขึ้นจะมี CDN ในตัวให้เปิดใช้งานได้โดยไม่มีค่าใช้จ่ายเพิ่มเติมนอกเหนือจากค่า Spaces ปกติ ต่างจากผู้ให้บริการบางรายที่ต้องซื้อบริการ CDN แยกต่างหากหรือเชื่อมกับ third-party อย่าง Cloudflare หรือ Fastly เพิ่มเอง หลักการทำงานคือ เมื่อเปิดใช้งาน CDN แล้ว DigitalOcean จะสร้าง endpoint ใหม่ในรูปแบบ your-space.region.cdn.digitaloceanspaces.com ซึ่งแตกต่างจาก endpoint ต้นทาง (origin) ที่เป็น your-space.region.digitaloceanspaces.com เมื่อมีคำขอไฟล์ผ่าน CDN endpoint ระบบจะตรวจสอบก่อนว่ามีไฟล์นั้นแคชอยู่ที่ edge server ใกล้ผู้ใช้หรือไม่ ถ้ามี (cache hit) จะส่งไฟล์กลับทันทีโดยไม่ต้องดึงจาก origin Space เลย แต่ถ้ายังไม่มี (cache miss) ระบบจะไปดึงไฟล์จาก origin มาเก็บไว้ที่ edge ก่อนแล้วค่อยส่งต่อให้ผู้ใช้ ครั้งต่อไปที่มีคนขอไฟล์เดียวกันจากภูมิภาคใกล้เคียงก็จะได้ cache hit ทันที ข้อดีหลักของสถาปัตยกรรมนี้คือช่วยลด latency สำหรับผู้ใช้ที่อยู่ไกลจาก region ต้นทาง เช่น ถ้า Space ตั้งอยู่ที่ sgp1 (สิงคโปร์) ผู้ใช้ในยุโรปที่ขอไฟล์ผ่าน CDN จะได้รับไฟล์จาก edge ที่ใกล้กว่าแทนที่จะต้องรอโหลดข้าม region นอกจากนี้ยังช่วยลดภาระ bandwidth ที่ origin Space ต้องรับโดยตรง เพราะคำขอส่วนใหญ่หลังจากไฟล์ถูกแคชแล้วจะไม่ไปถึง origin อีก สิ่งสำคัญที่ต้องเข้าใจคือ CDN ของ Spaces ทำงานเป็น pull-based cache ไม่ใช่ push CDN คือระบบจะไม่คัดลอกไฟล์ทั้งหมดไปเก็บล่วงหน้า แต่จะดึงมาแคชเมื่อมีการเรียกใช้จริงเท่านั้น (lazy caching) ทำให้เหมาะกับเว็บไซต์ที่มีไฟล์จำนวนมากแต่ถูกเรียกใช้ไม่เท่ากัน เพราะไม่ต้อง preload ทุกไฟล์ตั้งแต่แรก และเนื่องจาก Spaces ใช้ S3-compatible API เดิม การเปิด CDN จึงไม่กระทบกับโค้ดที่ upload หรือจัดการไฟล์อยู่แล้ว เพียงแค่เปลี่ยน URL ที่ใช้อ้างอิงไฟล์จาก origin endpoint ไปเป็น CDN endpoint เท่านั้น

Spaces is DigitalOcean's Object Storage service that is compatible with the S3 API, used for storing static files such as images, videos, backups, or downloadable files. Every Space created automatically includes a built-in CDN that can be enabled without additional cost beyond the standard Spaces pricing. This differs from some providers that charge separately for CDN service or require third-party integration like Cloudflare or Fastly. The way it works is: when you enable CDN, DigitalOcean creates a new endpoint in the format your-space.region.cdn.digitaloceanspaces.com, which is different from the origin endpoint (origin) at your-space.region.digitaloceanspaces.com. When a file is requested through the CDN endpoint, the system first checks if it's cached on an edge server near the user. If it's cached (cache hit), the file is returned immediately without fetching from the origin Space. If it's not cached (cache miss), the system fetches the file from the origin, stores it at the edge, and then delivers it to the user. On subsequent requests for the same file from nearby regions, it will result in a cache hit immediately. The main benefit of this architecture is reduced latency for users far from the origin region. For example, if your Space is in sgp1 (Singapore), users in Europe requesting files through the CDN will get them from a closer edge location instead of waiting across regions. It also reduces the bandwidth load on the origin Space since most requests after caching won't reach it directly. It's important to understand that Spaces CDN works as a pull-based cache, not a push CDN. The system doesn't copy all files in advance; instead, it pulls and caches files only when they're actually requested (lazy caching). This suits websites with many files that aren't accessed equally, since you don't need to preload everything. Since Spaces uses the same S3-compatible API, enabling CDN doesn't affect existing code that uploads or manages files—you just need to change the URL reference from the origin endpoint to the CDN endpoint.

ราคาเริ่ม $5/เดือน (รวม CDN)

DigitalOcean Spaces เริ่มต้นที่ $5 ต่อเดือน และฟีเจอร์ CDN รวมอยู่ในแพ็กเกจนี้แล้วโดยไม่มีค่าใช้จ่ายเพิ่มเติมแยกต่างหาก ต่างจากบางบริการที่คิดค่า CDN เป็นรายการแยกตามปริมาณ bandwidth ที่ใช้ ทำให้การประเมินต้นทุนล่วงหน้าทำได้ง่ายกว่าสำหรับทีมที่มีงบจำกัด (ข้อมูล ณ กรกฎาคม 2026 — ตรวจสอบราคาและรายละเอียดพื้นที่จัดเก็บ/bandwidth ที่รวมในแพ็กเกจล่าสุดที่หน้าราคาทางการของ DigitalOcean เนื่องจากรายละเอียดโควตาอาจมีการปรับเปลี่ยน) สำหรับผู้ที่ยังไม่เคยสมัครใช้งาน DigitalOcean มาก่อน ผู้ใช้ใหม่จะได้รับเครดิตทดลองใช้ฟรีมูลค่า $200 ใช้ได้ภายใน 60 วันหลังสมัคร (ต้องผูกบัตรเครดิตหรือ PayPal) ซึ่งเพียงพอสำหรับทดลองเปิด Space พร้อม CDN และทดสอบ workflow การอัปโหลด/purge cache ก่อนตัดสินใจใช้งานจริงในระยะยาว หากสนใจสมัครสามารถเริ่มต้นได้ที่ รับ $200 Free Credit → เรื่องที่ควรระวังคือค่าใช้จ่ายส่วนเกิน (overage) หากใช้พื้นที่จัดเก็บหรือ bandwidth เกินโควตาที่รวมในแพ็กเกจ $5/เดือน ซึ่งจะถูกคิดเพิ่มตามการใช้งานจริง สำหรับเว็บไซต์ที่มี traffic สูงหรือไฟล์ media ขนาดใหญ่ (เช่น วิดีโอความละเอียดสูง) ควรติดตามการใช้งานผ่าน Billing Dashboard เป็นระยะเพื่อไม่ให้บิลเกินคาด และเปรียบเทียบกับทางเลือกอื่น เช่น การรัน storage เองบน Droplet (ซึ่งไม่มี CDN ในตัวและต้องต่อกับ Cloudflare หรือบริการ CDN แยกเองเพิ่ม) ในแง่การเปรียบเทียบ Spaces CDN เหมาะกับทีมที่ต้องการความเรียบง่าย ไม่ต้องตั้งค่า origin server แยก ไม่ต้องดูแล cache layer เอง และต้องการให้ค่าใช้จ่ายของ storage กับ CDN อยู่ในบิลเดียวกัน ซึ่งช่วยลดความซับซ้อนด้านการจัดการเมื่อเทียบกับการต่อ third-party CDN เข้ากับ storage คนละผู้ให้บริการ

เปิดใช้งาน CDN Endpoint

การเปิดใช้งาน CDN สำหรับ Space ทำได้ง่ายผ่านหน้า control panel ของ DigitalOcean โดยเข้าไปที่เมนู Spaces เลือก Space ที่ต้องการ แล้วไปที่แท็บ Settings จะพบตัวเลือกสำหรับเปิดใช้งาน CDN เมื่อเปิดแล้วระบบจะสร้าง endpoint ใหม่ในรูปแบบ your-space.region.cdn.digitaloceanspaces.com ให้ทันทีโดยไม่ต้องรอนาน สามารถคัดลอก URL นี้ไปใช้แทน origin endpoint เดิมในโค้ดของเว็บไซต์หรือแอปพลิเคชันได้เลย สำหรับผู้ที่ต้องการจัดการผ่าน command line สามารถใช้ doctl ซึ่งเป็น CLI ทางการของ DigitalOcean โดยหลังจาก auth ด้วย Personal Access Token แล้ว คำสั่งพื้นฐานสำหรับสร้าง CDN endpoint จะอยู่ในกลุ่ม doctl compute cdn เช่น doctl compute cdn create --origin your-space.sgp1.digitaloceanspaces.com --ttl 3600 ซึ่งจะสร้าง CDN endpoint ผูกกับ origin ที่ระบุ พร้อมกำหนดค่า TTL เริ่มต้น วิธีนี้เหมาะกับทีมที่ต้องการทำ infrastructure as code หรือรวมขั้นตอนนี้เข้ากับสคริปต์ deploy อัตโนมัติ หลังสร้าง endpoint แล้วสามารถตรวจสอบรายการ CDN endpoint ทั้งหมดที่มีในบัญชีด้วย doctl compute cdn list ซึ่งจะแสดง ID, origin, endpoint URL และค่า TTL ปัจจุบัน การมี ID นี้จำเป็นสำหรับคำสั่งอื่นๆ ในภายหลัง เช่น การอัปเดตค่า TTL การผูก custom domain หรือการสั่ง purge cache ข้อควรรู้คือ endpoint CDN ที่สร้างขึ้นจะครอบคลุมทั้ง Space นั้นๆ ไม่สามารถเปิด CDN เฉพาะบาง path หรือบาง object ได้ หากต้องการแยกพฤติกรรม caching ระหว่างไฟล์ประเภทต่างๆ ควรพิจารณาแยก Space ตามการใช้งาน เช่น Space หนึ่งสำหรับ static asset ที่ cache ได้นาน กับอีก Space สำหรับไฟล์ที่ต้องอัปเดตบ่อย นอกจากนี้ก่อนเปิด CDN ควรตรวจสอบให้แน่ใจว่า object ที่ต้องการให้เข้าถึงผ่าน CDN ได้ตั้งค่า permission เป็น public-read ไว้แล้ว มิฉะนั้น CDN จะส่งค่า error กลับแทนไฟล์จริงแม้ endpoint จะสร้างสำเร็จ

  1. เปิด CDN ได้จาก Spaces → เลือก Space → แท็บ Settings ในหน้า control panel
  2. สร้าง endpoint ผ่าน CLI ด้วย doctl compute cdn create --origin ... --ttl ...
  3. ตรวจสอบรายการ endpoint ที่มีอยู่ด้วย doctl compute cdn list
  4. CDN ครอบคลุมทั้ง Space ไม่สามารถเปิดเฉพาะบาง path ได้

ตั้งค่า Custom Subdomain + SSL

โดยค่าเริ่มต้น CDN endpoint ที่ DigitalOcean สร้างให้จะอยู่ในรูปแบบ your-space.region.cdn.digitaloceanspaces.com ซึ่งใช้งานได้ทันทีพร้อม SSL ของ DigitalOcean เอง แต่สำหรับเว็บไซต์ที่ต้องการความเป็นแบรนด์ เช่นให้ URL ไฟล์ static ขึ้นต้นด้วยโดเมนตัวเอง อย่าง cdn.yourdomain.com สามารถผูก custom subdomain เข้ากับ CDN endpoint ได้ ขั้นตอนเริ่มจากไปที่ DNS provider ที่จัดการโดเมนอยู่ (ไม่ว่าจะเป็น DigitalOcean DNS เองหรือผู้ให้บริการอื่น) แล้วสร้าง CNAME record ชี้จาก subdomain ที่ต้องการ เช่น cdn ไปยัง CDN endpoint เดิม เช่น cdn.yourdomain.com CNAME your-space.sgp1.cdn.digitaloceanspaces.com จากนั้นกลับไปที่หน้า Settings ของ Space ในส่วน CDN แล้วกรอก custom subdomain ที่ตั้งไว้ พร้อมเลือกใบรับรอง SSL ที่จะใช้ สำหรับ SSL มีสองแนวทางหลัก คือใช้ Let's Encrypt certificate ที่ DigitalOcean ออกให้อัตโนมัติผ่านระบบ Certificate Manager ในบัญชี ซึ่งจะต่ออายุให้อัตโนมัติเช่นกัน หรืออัปโหลดใบรับรองของตัวเอง (custom certificate) หากมีอยู่แล้วจากผู้ให้บริการอื่น ทั้งสองแบบต้องเลือกไว้ในขั้นตอนตั้งค่า custom subdomain ก่อนจึงจะใช้งานผ่าน HTTPS ได้อย่างสมบูรณ์ หากข้ามขั้นตอนนี้ การเข้าถึงผ่าน custom domain ด้วย HTTPS จะขึ้น certificate error ทันทีเพราะใบรับรองไม่ครอบคลุมโดเมนที่ผูกไว้ ผ่าน CLI สามารถอัปเดต CDN endpoint ที่มีอยู่ให้ผูก custom domain และ certificate ได้ด้วยคำสั่งลักษณะ doctl compute cdn update <cdn-id> --domain cdn.yourdomain.com --certificate-id <certificate-id> โดย certificate-id ต้องเป็นใบรับรองที่อัปโหลดหรือออกไว้ในบัญชีล่วงหน้าแล้วผ่านเมนู Certificates สิ่งที่พลาดบ่อยคือลืมรอให้ DNS propagate ก่อนตรวจสอบผล หรือสร้าง CNAME ชี้ผิด endpoint (ชี้ไป origin แทนที่จะเป็น CDN endpoint) ทำให้ custom domain ใช้งานได้แต่ไม่ได้ประโยชน์จากการแคชเลย

สรุปสิ่งสำคัญ: สร้าง CNAME record ชี้จาก subdomain ไปยัง CDN endpoint เดิมก่อนผูกใน control panel
  1. สร้าง CNAME record ชี้จาก subdomain ไปยัง CDN endpoint เดิมก่อนผูกใน control panel
  2. เลือกได้ระหว่าง Let's Encrypt certificate ที่ต่ออายุอัตโนมัติ หรืออัปโหลดใบรับรองเอง
  3. อัปเดตผ่าน CLI ด้วย doctl compute cdn update พร้อมระบุ domain และ certificate-id
  4. ต้องรอ DNS propagate และเลือก certificate ก่อน มิฉะนั้น HTTPS จะ error

Purge Cache และจัดการ TTL

TTL (Time To Live) คือระยะเวลาที่ไฟล์จะถูกเก็บไว้ที่ edge cache ก่อนที่ระบบจะไปตรวจสอบกับ origin Space อีกครั้งว่าไฟล์มีการเปลี่ยนแปลงหรือไม่ ค่านี้กำหนดได้ตั้งแต่ตอนสร้าง CDN endpoint ผ่านพารามิเตอร์ --ttl (หน่วยเป็นวินาที) และสามารถปรับเปลี่ยนภายหลังได้ทั้งผ่าน control panel และคำสั่ง doctl compute cdn update โดยทั่วไปควรตั้ง TTL ให้ยาวขึ้นสำหรับไฟล์ที่แทบไม่เปลี่ยนแปลง เช่น รูปโลโก้ ฟอนต์ หรือไฟล์ library เวอร์ชันคงที่ เพื่อให้ได้ประโยชน์จาก cache hit สูงสุด และตั้งสั้นลงสำหรับไฟล์ที่อัปเดตบ่อย เมื่อมีการอัปเดตไฟล์ที่ origin Space แต่ edge cache ยังเก็บไฟล์เวอร์ชันเก่าอยู่ (เพราะยังไม่ครบ TTL) ผู้ใช้งานปลายทางอาจยังเห็นเนื้อหาเก่าจนกว่า cache จะหมดอายุ วิธีแก้คือสั่ง purge cache หรือที่ DigitalOcean เรียกว่า flush cache ซึ่งทำได้จากหน้า control panel โดยเลือก Space แล้วไปที่ส่วน CDN แล้วกดปุ่ม flush หรือทำผ่าน CLI ด้วยคำสั่ง doctl compute cdn flush <cdn-id> --files "*" เพื่อล้าง cache ทั้งหมด หรือระบุ path เฉพาะไฟล์ เช่น --files "images/logo.png" เพื่อล้างเฉพาะไฟล์ที่ต้องการโดยไม่กระทบไฟล์อื่นที่ยัง cache ได้ดีอยู่ การ flush cache ทั้งหมดบ่อยเกินไปจะทำให้ cache hit ratio ลดลงชั่วคราว เพราะทุก request หลัง flush จะกลายเป็น cache miss ที่ต้องไปดึงจาก origin ใหม่ทั้งหมด ซึ่งเพิ่มภาระให้ origin Space และอาจทำให้ผู้ใช้บางส่วนได้รับ response ที่ช้าลงชั่วคราวในช่วง cache กำลังถูกสร้างใหม่ ดังนั้นแนวทางที่แนะนำมากกว่าคือ purge เฉพาะไฟล์ที่เปลี่ยนจริงๆ แทนการ flush ทั้ง Space ทุกครั้งที่มีการอัปเดตแม้เพียงไฟล์เดียว อีกเทคนิคหนึ่งที่ช่วยลดความจำเป็นในการ purge บ่อยๆ คือการใช้ cache-busting ด้วยการเปลี่ยนชื่อไฟล์หรือเพิ่ม version/hash ต่อท้าย เช่นเปลี่ยนจาก style.css เป็น style.a1b2c3.css ทุกครั้งที่มีการแก้ไข วิธีนี้ทำให้ URL ใหม่ไม่ตรงกับ cache เดิมโดยอัตโนมัติ ไม่ต้องสั่ง purge เลย และยังหลีกเลี่ยงปัญหา browser cache ฝั่งผู้ใช้ที่อาจไม่เชื่อฟัง TTL ของ CDN ด้วย

เมื่อไหร่ควรใช้ฟีเจอร์นี้ (Use Case จริง)

Spaces CDN เหมาะกับสถานการณ์ที่เว็บไซต์หรือแอปพลิเคชันต้องส่งไฟล์ static จำนวนมากให้ผู้ใช้ที่กระจายอยู่หลายภูมิภาค ตัวอย่างที่พบบ่อยที่สุดคือเว็บไซต์ WordPress หรือ e-commerce ที่มีรูปสินค้าจำนวนมาก การย้ายไฟล์ media ทั้งหมดไปเก็บใน Spaces แล้วเปิด CDN ช่วยลดภาระ disk I/O และ bandwidth ของ Droplet ที่รัน WordPress โดยตรง ทำให้เว็บโหลดเร็วขึ้นทั้งฝั่งเซิร์ฟเวอร์และฝั่งผู้ใช้ อีกกรณีคือแอปพลิเคชันที่ให้ผู้ใช้อัปโหลด/ดาวน์โหลดไฟล์ เช่น แพลตฟอร์มแชร์ไฟล์ ระบบจัดเก็บเอกสาร หรือแอปที่มี user-generated content อย่างรูปโปรไฟล์และวิดีโอสั้น การใช้ Spaces เป็น storage หลักพร้อม CDN ช่วยให้ไม่ต้องผ่าน application server ทุกครั้งที่มีการเรียกดูไฟล์ ลดภาระของ backend และทำให้ scale ได้ง่ายขึ้นเมื่อจำนวนผู้ใช้เพิ่มขึ้น สำหรับทีมพัฒนาซอฟต์แวร์ที่ต้อง distribute ไฟล์ดาวน์โหลด เช่น installer, firmware หรือ static asset ของเว็บแอป (JavaScript bundle, font, CSS) การใช้ CDN endpoint แทนการให้ Droplet เดียวรับภาระส่งไฟล์ทั้งหมดโดยตรงจะช่วยลดความเสี่ยงที่เซิร์ฟเวอร์ล่มเมื่อมีการดาวน์โหลดพร้อมกันจำนวนมาก เช่นตอนปล่อยเวอร์ชันใหม่ที่มีคนเข้ามาดาวน์โหลดพร้อมกัน ในทางกลับกัน Spaces CDN อาจไม่ใช่คำตอบที่เหมาะสมสำหรับเนื้อหาที่เปลี่ยนแปลงตลอดเวลาแบบ real-time เช่น API response ที่ต้องใช้ข้อมูลล่าสุดทุกครั้ง หรือหน้าเว็บแบบ dynamic ที่ render ฝั่งเซิร์ฟเวอร์ตามข้อมูลผู้ใช้แต่ละคน กรณีเหล่านี้ควรใช้ CDN เฉพาะกับส่วนที่เป็น static asset เท่านั้น ส่วน logic แบบ dynamic ให้คงอยู่ที่ Droplet หรือ App Platform ตามปกติ นอกจากนี้หากต้องการฟีเจอร์ขั้นสูงกว่า เช่น edge computing, WAF ในตัว หรือ image optimization อัตโนมัติ อาจต้องพิจารณาต่อ Cloudflare หรือบริการ CDN เฉพาะทางเพิ่มเติมหน้า Spaces อีกชั้นหนึ่ง

ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข

ในประสบการณ์ของเรา ข้อผิดพลาดที่พบบ่อยที่สุดคือลืมตั้งค่า object permission เป็น public-read ก่อนอัปโหลดไฟล์ ทำให้แม้ CDN endpoint จะสร้างสำเร็จและ URL ดูถูกต้อง แต่เมื่อเรียกดูกลับได้ error แทนไฟล์จริง วิธีแก้คือตรวจสอบ ACL ของแต่ละ object ในหน้า control panel หรือกำหนด default permission ตอน upload ผ่าน API/SDK ให้เป็น public-read ตั้งแต่ต้น เพื่อไม่ต้องมาตั้งใหม่ทีละไฟล์ภายหลัง อีกปัญหาที่พบบ่อยคือความสับสนระหว่าง origin endpoint กับ CDN endpoint ทีมพัฒนาบางทีมยังคงอ้างอิง URL แบบ your-space.region.digitaloceanspaces.com ในโค้ดแอปพลิเคชันทั้งที่ตั้งใจจะใช้ CDN ทำให้ทุก request วิ่งตรงไปที่ origin โดยไม่ได้ประโยชน์จากการแคชเลย ควรตรวจสอบ config หรือ environment variable ที่เก็บ base URL ของไฟล์ static ให้ชี้ไปที่ endpoint ที่มีคำว่า cdn. นำหน้าเสมอ ปัญหาเรื่อง cache ที่ไม่อัปเดตหลังแก้ไขไฟล์ก็พบบ่อยเช่นกัน โดยเฉพาะกับทีมที่แก้ไขไฟล์ CSS/JS โดยใช้ชื่อไฟล์เดิมซ้ำแล้วลืมสั่ง purge ทำให้ผู้ใช้บางส่วนยังเห็นเวอร์ชันเก่าอยู่นานเกินคาด การแก้ปัญหาระยะสั้นคือสั่ง flush cache เฉพาะไฟล์ที่เปลี่ยน ส่วนการแก้ปัญหาระยะยาวคือปรับ workflow deploy ให้ใช้ cache-busting filename โดยอัตโนมัติ การตั้งค่า custom subdomain โดยไม่รอให้ DNS propagate ก่อนทดสอบก็เป็นอีกจุดที่ทำให้เข้าใจผิดว่าตั้งค่าไม่สำเร็จ ทั้งที่จริงเพียงแค่ต้องรอเวลาให้ค่า DNS กระจายไปทั่วโลกก่อน (อาจใช้เวลาไม่กี่นาทีถึงหลายชั่วโมงขึ้นกับ TTL ของ DNS record เดิม) และควรตรวจสอบด้วยคำสั่งอย่าง dig หรือ nslookup ก่อนสรุปว่ามีปัญหาที่ฝั่ง DigitalOcean สุดท้ายคือการไม่ตรวจสอบ CORS header เมื่อไฟล์ใน Spaces ถูกเรียกใช้จากโดเมนอื่น เช่น เว็บไซต์หลักเรียกใช้ font หรือ JavaScript จาก CDN endpoint คนละโดเมน หากไม่ได้ตั้งค่า CORS policy ที่ระดับ Space ไว้ browser จะบล็อกการโหลดไฟล์เหล่านั้นด้วย CORS error แม้ไฟล์จะเข้าถึงได้ปกติผ่านการเปิด URL ตรงๆ ก็ตาม

แนวทางปฏิบัติที่ดีที่สุด (Best Practices)

เพื่อให้ใช้งาน Spaces CDN ได้อย่างมีประสิทธิภาพและลดปัญหาที่พบบ่อยข้างต้น มีแนวทางปฏิบัติหลายข้อที่ควรทำตั้งแต่เริ่มออกแบบระบบ ข้อแรกคือแยก Space ตามลักษณะการใช้งาน เช่น แยก Space สำหรับ static asset ของเว็บไซต์ (ที่ cache ได้นาน) ออกจาก Space สำหรับไฟล์ที่ผู้ใช้อัปโหลดเองหรือไฟล์ที่เปลี่ยนบ่อย เพื่อให้ตั้งค่า TTL และ permission ที่เหมาะสมกับแต่ละกลุ่มได้โดยไม่กระทบกัน ข้อสองคือใช้ cache-busting filename เป็นมาตรฐานสำหรับไฟล์ static ที่มีการอัปเดตบ่อย เช่น CSS/JS bundle โดยเพิ่ม content hash หรือ build number ต่อท้ายชื่อไฟล์ ทำให้ไม่ต้องพึ่งการ purge cache ด้วยมือเลย และยังหลีกเลี่ยงปัญหา browser cache ฝั่งผู้ใช้ปลายทางไปพร้อมกัน วิธีนี้เป็นแนวทางมาตรฐานที่ build tool สมัยใหม่อย่าง Webpack, Vite รองรับอยู่แล้ว ข้อสามคือตั้งค่า TTL ให้เหมาะสมกับประเภทไฟล์จริงๆ แทนที่จะใช้ค่าเดียวกันทั้งหมด ไฟล์ที่แทบไม่เปลี่ยนอย่างฟอนต์หรือไอคอนควรตั้ง TTL ยาว ส่วนไฟล์ที่มีโอกาสอัปเดตควรตั้งสั้นลงหรือใช้ cache-busting แทน และควรทดสอบพฤติกรรม cache จริงด้วยการตรวจสอบ response header หลังเรียกไฟล์ผ่าน CDN เพื่อยืนยันว่าค่าที่ตั้งไว้ทำงานตามที่คาดหวัง ข้อสี่คือจัดการ permission และ CORS policy อย่างเป็นระบบตั้งแต่ตอนสร้าง Space ไม่ใช่มาตั้งทีละไฟล์ภายหลัง โดยกำหนด default ACL และ CORS rule ที่ระดับ Space ให้ครอบคลุมโดเมนที่จะเรียกใช้งานจริงทั้งหมด และควรจำกัดเฉพาะโดเมนที่จำเป็นแทนการเปิดกว้างแบบ wildcard เพื่อความปลอดภัย ข้อสุดท้ายคือติดตามการใช้งาน bandwidth และ storage อย่างสม่ำเสมอผ่าน Billing Dashboard โดยเฉพาะช่วงที่ traffic เพิ่มขึ้นกะทันหัน เช่น ช่วงโปรโมชั่นหรือมีคอนเทนต์ไวรัล เพื่อประเมินว่าจะยังคงอยู่ในโควตาแพ็กเกจปัจจุบันหรือควรอัปเกรด และหากต้องการทำ infrastructure as code ควรจัดการการสร้าง/อัปเดต CDN endpoint ผ่าน Terraform provider ทางการของ DigitalOcean แทนการตั้งค่าด้วยมือผ่าน panel เพื่อให้ config สามารถ track เป็นเวอร์ชันและ reproduce ได้เมื่อต้องสร้างสภาพแวดล้อมใหม่

รับ $200 Free Credit →

คำถามที่พบบ่อย (FAQ)

CDN ของ Spaces ต่างจาก origin endpoint อย่างไร
origin endpoint (your-space.region.digitaloceanspaces.com) ให้บริการไฟล์โดยตรงจาก storage backend ทุกครั้งที่มีคำขอ ส่วน CDN endpoint (your-space.region.cdn.digitaloceanspaces.com) จะแคชไฟล์ไว้ที่ edge server ใกล้ผู้ใช้ ช่วยลด latency และลดภาระที่ origin ต้องรับโดยตรงจากทุกคำขอ
เปิดใช้งาน CDN มีค่าใช้จ่ายเพิ่มจากแพ็กเกจ Spaces หรือไม่
ไม่มี ฟีเจอร์ CDN รวมอยู่ในแพ็กเกจ Spaces ที่เริ่มต้น $5/เดือนแล้ว แต่หากมีการใช้งาน bandwidth หรือ storage เกินโควตาที่รวมในแพ็กเกจ จะมีค่าใช้จ่ายส่วนเกินตามการใช้งานจริง ควรตรวจสอบราคาล่าสุดที่หน้าทางการของ DigitalOcean ก่อนตัดสินใจ
ผูก custom domain แล้วไม่ตั้ง SSL certificate ได้หรือไม่
ทำได้ในทางเทคนิคสำหรับการเข้าถึงผ่าน HTTP แต่ไม่แนะนำ เพราะเว็บไซต์สมัยใหม่ส่วนใหญ่บังคับใช้ HTTPS และ browser จะแจ้งเตือนความไม่ปลอดภัยหากเรียกไฟล์แบบ mixed content ควรตั้ง Let's Encrypt certificate หรืออัปโหลดใบรับรองเองควบคู่กับการผูก custom subdomain เสมอ
purge cache เฉพาะบางไฟล์ได้ไหม หรือต้อง flush ทั้งหมดทุกครั้ง
ได้ ผ่านคำสั่ง doctl compute cdn flush สามารถระบุ path ของไฟล์เฉพาะที่ต้องการล้าง cache ได้ ไม่จำเป็นต้อง flush ทั้ง Space ทุกครั้งที่มีการอัปเดตไฟล์เพียงบางไฟล์ ซึ่งช่วยรักษา cache hit ratio ของไฟล์อื่นที่ไม่ได้เปลี่ยนไว้ได้
Spaces CDN มีให้บริการครบทุก region หรือไม่
Spaces (Standard) ไม่มีให้บริการที่ region nyc1 และ nyc2 ส่วน region อื่นๆ ที่รองรับ Spaces จะมี CDN ให้ใช้งานได้ตามปกติ สำหรับผู้ใช้ในไทย region sgp1 (สิงคโปร์) เป็นตัวเลือกที่ใกล้ที่สุด รองลงมาคือ blr1 (บังกาลอร์)
ใช้ Spaces CDN ร่วมกับ Cloudflare ได้หรือไม่
ได้ บางทีมเลือกวาง Cloudflare ไว้ด้านหน้า CDN endpoint ของ Spaces อีกชั้นเพื่อได้ฟีเจอร์เพิ่มเติมอย่าง WAF หรือ page rules ขั้นสูง แต่สำหรับการใช้งานทั่วไปที่ต้องการแค่เร่งความเร็วไฟล์ static การใช้ CDN ในตัวของ Spaces เพียงอย่างเดียวก็เพียงพอแล้วโดยไม่ต้องเพิ่มความซับซ้อน