CDN là gì: ý nghĩa của CDN, lý do nên dùng và cách kết nối WordPress

Môi trường thử nghiệm Họ RHELAlmaLinux 9.8Kiểm tra ngày 2026-10-16

CDN (Content Delivery Network) là mạng phân phối nội dung lưu tệp của máy chủ gốc trên các máy chủ biên ở nhiều khu vực và phản hồi khách truy cập từ máy chủ gần họ nhất. Để xem máy chủ biên có phản hồi từ bộ nhớ đệm hay không, chúng tôi đã kiểm tra header phản hồi của một dịch vụ phân phối thư viện công khai như jsDelivr, và tệp jQuery đang được phục vụ từ bản sao trong bộ nhớ đệm. Hai cách kết nối WordPress là đổi địa chỉ tệp và proxy DNS được chúng tôi so sánh theo tài liệu chính thức.

1️⃣ Ý nghĩa của CDN: máy chủ biên và máy chủ gốc

POP (Point of Presence) là trung tâm dữ liệu đặt máy chủ biên, và yêu cầu của khách truy cập được chuyển đến POP gần nhất.

Máy chủ biên nhận yêu cầu sẽ phản hồi ngay nếu đã lưu tệp; nếu chưa, nó lấy tệp từ máy chủ gốc để phản hồi và lưu tệp đó trên máy chủ biên. CloudFront, CDN của AWS, bắt đầu gửi cho khách truy cập ngay khi byte đầu tiên đến từ máy chủ gốc (theo tài liệu chính thức của AWS).

Máy chủ biên của CDN và máy chủ gốc

Máy chủ biên chỉ lưu những tệp mà khách truy cập đã yêu cầu, nên dù cùng một tệp, yêu cầu đầu tiên ở mỗi máy chủ biên vẫn đi đến tận máy chủ gốc.

Cách lấy tệp khi có yêu cầu đến như vậy gọi là phương thức pull, ngoài ra còn có phương thức push, trong đó bạn tải tệp lên CDN từ trước.

2️⃣ Lý do dùng CDN: khoảng cách và tải của máy chủ gốc

Khoảng cách giữa khách truy cập và máy chủ càng xa thì thời gian khứ hồi (RTT) của mỗi yêu cầu càng dài. Khi mở một trang, ngoài HTML còn có các yêu cầu hình ảnh, CSS và JavaScript, nên nếu máy chủ biên ở gần phản hồi thì thời gian khứ hồi của mọi yêu cầu đều được rút ngắn.

Các yêu cầu do máy chủ biên phản hồi không đi đến máy chủ gốc, nên mức dùng CPU và lưu lượng truyền tải (băng thông) của máy chủ gốc cũng giảm. Khi bạn kết nối DNS qua proxy của Cloudflare, IP của máy chủ gốc không bị lộ, và các cuộc tấn công DDoS cũng bị CDN chặn trước (theo tài liệu chính thức của Cloudflare).

Với trang web có khách truy cập tập trung cùng khu vực với máy chủ gốc, lợi ích từ khoảng cách là nhỏ. Ở những trang như vậy, lợi ích lớn hơn của CDN là giảm tải cho máy chủ gốc và tiết kiệm lưu lượng truyền tải chứ không phải rút ngắn thời gian phản hồi.

3️⃣ Tệp được lưu vào bộ nhớ đệm: tệp tĩnh và HTML

Với thiết lập mặc định, Cloudflare chỉ lưu vào bộ nhớ đệm các tệp tĩnh như hình ảnh, CSS và JavaScript, được xác định theo phần mở rộng tệp (theo tài liệu chính thức của Cloudflare). HTML của trang và JSON nằm ngoài bộ nhớ đệm mặc định, nên dù đã kết nối Cloudflare thì máy chủ gốc vẫn phản hồi chúng.

Muốn lưu cả HTML vào bộ nhớ đệm, bạn cần tạo riêng một quy tắc bộ nhớ đệm trên CDN. Khi đó, hãy loại khỏi quy tắc những trang có nội dung khác nhau theo từng người, như trang của người dùng đã đăng nhập hay giỏ hàng, để màn hình của khách truy cập khác không bị lẫn vào.

4️⃣ Kết nối WordPress: đổi địa chỉ tệp và proxy DNS

Khi kết nối CDN với WordPress, bạn chỉ đổi địa chỉ của tệp tĩnh sang địa chỉ CDN, hoặc đặt DNS của tên miền sang proxy của CDN để mọi yêu cầu đều đi qua CDN.

Phương thứcNơi kết nốiYêu cầu đi qua CDNIP máy chủ gốc
Đổi địa chỉ tệpNhập địa chỉ CDN (CNAME) vào cài đặt CDN của plugin bộ nhớ đệmTệp tĩnh như hình ảnh, CSS và JavaScriptVẫn công khai
Proxy DNSKết nối bản ghi DNS của tên miền với proxy của CDNMọi yêu cầu HTTP và HTTPS của trang webẨn sau CDN

Với cách đổi địa chỉ tệp, trong cài đặt CDN của plugin bộ nhớ đệm như WP Rocket bạn nhập địa chỉ (CNAME) do nhà cung cấp CDN đưa ra. Sau khi nhập, địa chỉ hình ảnh, CSS và JavaScript trong HTML của trang sẽ đổi thành địa chỉ CDN (theo tài liệu chính thức của WP Rocket). Bản thân HTML vẫn do máy chủ gốc phản hồi.

Màn hình cài đặt WP Rocket: Other CDN trong thẻ Content Delivery, công tắc Your CDN và dòng CDN CNAME(s)
Trong thẻ [Content Delivery] của [Cài đặt › WP Rocket], khi mở [Other CDN] sẽ thấy dòng [CDN CNAME(s)] để nhập địa chỉ CDN. Nhập địa chỉ CDN rồi bật công tắc [Your CDN] ở phía trên thì địa chỉ tệp sẽ đổi thành địa chỉ CDN; nếu có nhiều địa chỉ, hãy thêm dòng bằng [+ Add CNAME].

Khi dùng cách proxy DNS, DNS của tên miền sẽ do nhà cung cấp CDN quản lý. Cloudflare cũng có cách kết nối proxy mà không cần chuyển nameserver, chỉ cần thêm bản ghi CNAME ở nhà cung cấp DNS hiện tại. Cách này chỉ dùng được ở gói Business trở lên (theo tài liệu chính thức của Cloudflare).

5️⃣ Kiểm tra cache hit: header cf-cache-status và age

Bạn kiểm tra CDN có phản hồi tệp từ bộ nhớ đệm hay không bằng header phản hồi. Dưới đây là lệnh chúng tôi dùng để kiểm tra header phản hồi của tệp jQuery do jsDelivr phân phối và kết quả.

curl -sI https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js | grep -iE "^(cache-control|cf-cache-status|age|server):"
cache-control: public, max-age=31536000, s-maxage=31536000, immutable
age: 45920
cf-cache-status: HIT
server: cloudflare

[server: cloudflare] cho biết phản hồi này do máy chủ biên của Cloudflare gửi, còn [cf-cache-status: HIT] do Cloudflare thêm vào nghĩa là phản hồi từ bộ nhớ đệm. [age: 45920] cho biết tệp này đã nằm trong bộ nhớ đệm khoảng 12 giờ 45 phút. [max-age=31536000] là chỉ thị của máy chủ gốc cho phép lưu tệp trong 1 năm.

Khi giá trị là [MISS], [DYNAMIC] hoặc [BYPASS] thay vì [HIT], yêu cầu đi đến đâu thì bạn có thể xem bằng cách bấm các nút giá trị trong sơ đồ bên dưới.

🧩 cf-cache-status Nơi yêu cầu đi đến theo từng giá trị
Sơ đồ giải thích
📨 cf-cache-status
🧑‍💻 Khách truy cập
Header phản hồi nhận đượccf-cache-status: HITcf-cache-status: MISScf-cache-status: DYNAMICcf-cache-status: BYPASS
Phản hồi ngay từ bộ nhớ đệmPhản hồi bằng tệp đã lấyChuyển tiếp phản hồi gốcChuyển tiếp phản hồi gốc→
🌐 Máy chủ biên gần nhất (POP)
💾 CacheCó tệp đã lưuKhông có tệp đã lưu, lưu tệp đã lấyKhông thuộc bộ nhớ đệm (HTML), không kiểm traThuộc bộ nhớ đệm nhưng không lưu
Máy chủ gần khách truy cập
Không đi đến máy chủ gốcLấy tệpChuyển tiếp không kiểm tra bộ nhớ đệmLấy tệp→
🖥️ Server gốc
Không có yêu cầuPhản hồi tệpPhản hồi HTMLHeader phản hồi Cache-Control: no-store hoặc private
[cf-cache-status: HIT] nghĩa là máy chủ biên đã phản hồi ngay từ bộ nhớ đệm, và yêu cầu này không đi đến máy chủ gốc.
Tệp không có trong bộ nhớ đệm và được lấy từ máy chủ gốc sẽ hiển thị là [MISS], và máy chủ biên lưu tệp đó trong lúc phản hồi.
HTML không thuộc bộ nhớ đệm nên được chuyển tiếp đến máy chủ gốc mà không kiểm tra bộ nhớ đệm sẽ hiển thị là [DYNAMIC].
Nếu phản hồi của máy chủ gốc có chỉ thị [Cache-Control: no-store] hoặc [private] thì ngay cả tệp thuộc bộ nhớ đệm cũng hiển thị là [BYPASS] và không được lưu.

🔢 FAQ & nội dung đề xuất

Web hosting là máy chủ chứa tệp gốc và cơ sở dữ liệu của trang web, còn CDN là mạng đứng phía trước phản hồi bằng bản sao tệp. Dù đã kết nối CDN, bạn vẫn cần máy chủ gốc.

Varnish lưu phản hồi ở một nơi phía trước máy chủ gốc, còn CDN làm cùng việc đó trên các máy chủ biên ở nhiều nơi trên thế giới. Header phản hồi của CDN chính thức của jQuery (code.jquery.com) có [via: 1.1 varnish, 1.1 varnish]. Từ header này có thể xác nhận máy chủ biên của code.jquery.com đã phản hồi qua Varnish.

Dùng chức năng xóa bộ nhớ đệm (Purge) trong trang quản lý CDN để xóa địa chỉ cụ thể hoặc toàn bộ bộ nhớ đệm. Một số plugin bộ nhớ đệm của WordPress cũng xóa luôn bộ nhớ đệm của CDN đã kết nối khi bạn sửa bài viết.

ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.