Cache website & cache phía server: cách cache WordPress hoạt động

Thông báo tiếp thị liên kết Ver 3.1
Thông báo tiếp thị liên kết Ver 3.2 (chỉ trên di động)

Khi kiểm tra cache website và cache phía server trên một server Nginx + Apache, các yêu cầu trang WordPress đi xuống lần lượt từ trình duyệt qua CDN, cache trang, OPcache và Redis, rồi dừng ở tầng có bản sao. Với các yêu cầu trang đi thẳng vào server gốc, nginx gửi ngay file HTML do WP Rocket tạo, không đi xuống đến PHP và cơ sở dữ liệu.

Ⅰ. Cấu trúc cache của WordPress

Trong máy tính, cache là kỹ thuật lưu tạm dữ liệu để có thể truy cập nhanh, và trên web cũng hoạt động theo cùng nguyên lý, góp phần lớn vào việc tăng hiệu suất.

Caching lưu trữ dữ liệu để khi khách truy cập vào website, server không phải tạo mới mỗi lần mà tải nhanh dữ liệu đã lưu, giúp rút ngắn thời gian tải trang. Nhờ đó giảm tải cho server và cải thiện trải nghiệm người dùng.

Cache dùng cho các yêu cầu WordPress chia thành hai nhánh: cache website và cache phía server. Tiêu chuẩn cache HTTP chia cache chỉ lưu trong trình duyệt của một khách truy cập là private cache, và cache CDN·proxy dùng chung cho nhiều khách truy cập là shared cache; bài viết này gộp hai loại đó thành cache website.

Cache trang, OPcache và cache đối tượng là các loại cache gắn vào quá trình WordPress chạy bên trong server. Tiêu chuẩn HTTP không phân loại riêng chúng, còn tài liệu chính thức của WordPress giải thích chúng thành plugin cache (cache trang), cache đối tượng và cache server (cache opcode như OPcache).

🗂️ Các cache mà yêu cầu WordPress đi qua
🌐 Cache websiteCache HTTP · phân loại của MDN
private cacheCache trình duyệt
shared cache
proxy cacheProxy trong mạng công ty·nhà mạng
managed cacheCDN · reverse proxy (Varnish)
🖥️ Cache phía serverPhân loại theo tài liệu chính thức WordPress
Page cacheHTML tĩnh do plugin cache tạo (WP Rocket)
OPcacheCache opcode · chạy PHP
Object cacheDữ liệu vẫn còn sau khi yêu cầu kết thúc (Redis)

Toàn bộ các lĩnh vực có dùng cache được tổng hợp trong Cache: định nghĩa và mọi lĩnh vực có dùng cache (bài viết riêng), còn bốn nhánh tối ưu hiệu suất, bao gồm cache, được tổng hợp trong Tối ưu hiệu suất web: cấu trúc và định nghĩa (bài viết riêng).

Trong trình mô phỏng bên dưới, chọn một cache ở cây bên trái rồi bấm chip để xem yêu cầu dừng ở tầng nào. Tầng mà người vận hành WordPress bật đầu tiên bằng plugin cache là cache trang.

🧭 Trình mô phỏng các tầng cacheTrình mô phỏng minh họa
🗂️ Các cache mà yêu cầu WordPress đi qua
🧰 Loại yêu cầu
Cache trình duyệt
Cache HTTP được lưu trong trình duyệt của khách truy cập. Chọn [Hình ảnh · CSS] rồi bấm [First visit] → [Visit again]: từ lần thứ hai, yêu cầu không còn gửi đến server.
Header cache HTTP
Quy tắc server dùng để báo cho trình duyệt và CDN thời gian lưu trữ. Các dòng header trong nhật ký phản hồi là giá trị thật nhận từ server Nginx + Apache.
Cache CDN · proxy
Bản sao dùng chung cho nhiều khách truy cập. Bật [Use CDN] rồi bấm [First visit] → [Visit again]: phản hồi kết thúc ở edge.
Page cache
Lưu HTML do PHP tạo thành file. Bấm [Visit again] thì yêu cầu không đi xuống đến PHP và cơ sở dữ liệu.
OPcache
Giữ bytecode PHP đã biên dịch trong bộ nhớ. Ở [Visit after editing the post], PHP chạy lại nhưng bỏ qua bước biên dịch.
Object cache
Lưu kết quả truy vấn vào Redis. Ở [Visit after editing the post], chỉ dữ liệu bài viết đã thay đổi mới được đọc lại từ MariaDB.
Toàn bộ luồng
Yêu cầu đi từ trên xuống và dừng ở tầng đầu tiên có bản sao.
TầngNơi lưuLưu gìVí dụ Nginx + Apache
Cache trình duyệtThiết bị của khách truy cậpHTML·CSS·JS·hình ảnh·phông chữCSS·hình ảnh 7 ngày
Cache CDN·proxyPhía trước server (edge·reverse proxy)Bản sao trang·file tĩnhBunny CDN
Page cacheỔ đĩa·bộ nhớ serverHTML do PHP tạoWP Rocket + nginx
OPcacheBộ nhớ serverBytecode PHPPHP 8.3, tắt JIT
Object cacheBộ nhớ serverKết quả truy vấn·đối tượngRedis
Trình mô phỏng minh họa chỉ chạy trong trình duyệt. Các dòng header trong nhật ký phản hồi được lấy ngày 10 tháng 10 năm 2026 từ server Nginx + Apache, còn các giá trị trong ngoặc, như ETag sau khi sửa, là ví dụ.

Ⅱ. Cache website

Cache website là loại cache mà trình duyệt của khách truy cập và CDN·proxy lưu bản sao theo chỉ dẫn server đưa ra qua header phản hồi. Các header tiêu biểu là [Cache-Control]·[ETag]·[Expires], và khi hết thời gian lưu, yêu cầu có điều kiện ([304 Not Modified]) sẽ kiểm tra xem có thay đổi không.

1️⃣ Cache trình duyệt

Cache trình duyệt là cache HTTP lưu trong trình duyệt web của khách truy cập. Nó giữ HTML·CSS·JavaScript·hình ảnh·phông chữ, và khi tài nguyên đó được yêu cầu lại thì không đi đến server hoặc chỉ kiểm tra xem có thay đổi không.

Thời gian lưu do server quyết định, không phải khách truy cập. Server Nginx + Apache bên dưới yêu cầu lưu CSS và hình ảnh 7 ngày, còn trang HTML được trả về không kèm thời hạn để mỗi lần truy cập lại đều kiểm tra.

📨 Header phản hồi đo thực tếCấu hình Nginx + Apache · 2026-10-10
💻 Máy tính của khách truy cậpCache trình duyệt
──────▶① Yêu cầu đầu tiênGET /style.css
🖥️ Server websiteNginx + Apache
💻 Máy tính của khách truy cậpCache trình duyệt
◀──────② File + chỉ dẫn lưu trữcache-control: max-age=604800
🖥️ Server websiteNginx + Apache
③ Trình duyệt lưu 7 ngày theo chỉ dẫn, và nếu truy cập lại trong thời gian đó thì không gửi yêu cầu đến server.
💻 Máy tính của khách truy cậpCache trình duyệt
──────▶④ Kiểm tra sau khi hết hạnIf-None-Match: "6ab12775-2ee8"
🖥️ Server websiteNginx + Apache
💻 Máy tính của khách truy cậpCache trình duyệt
◀──────⑤ Không thay đổiHTTP/2 304 (không có nội dung)
🖥️ Server websiteNginx + Apache
🖼️ CSS · hình ảnh
cache-control: max-age=604800
expires: Sat, 17 Oct 2026 03:21:00 GMT
etag: "6ab12775-2ee8"
Trình duyệt 7 ngày liền dùng bản sao đã lưu mà không hỏi lại server.
📄 Trang HTML
etag: "6ac9298c-95575"
last-modified: Fri, 09 Oct 2026 17:51:08 GMT
Không có chỉ dẫn thời gian lưu, nên khi truy cập lại trình duyệt hỏi trước bằng ETag xem có thay đổi không.
Khi yêu cầu lại với cùng ETag, server chỉ trả về [HTTP/2 304] không kèm nội dung, và trình duyệt tiếp tục dùng bản sao đã lưu.

2️⃣ Cache CDN · proxy

Cache CDN·proxy nằm giữa khách truy cập và server gốc, được nhiều khách truy cập dùng chung. Forward proxy nằm ở phía khách truy cập như trong mạng doanh nghiệp, còn reverse proxy và CDN nằm phía trước server và trả lời bằng bản sao đã lưu thay cho server gốc.

Reverse proxy tiêu biểu là Varnish Cache, và các CDN như Bunny CDN·Akamai cũng theo cùng cấu trúc. Với DNS theo khu vực, khách truy cập ở khu vực có server gốc kết nối thẳng đến server gốc, còn khách ở khu vực khác được edge CDN gần nhất (ví dụ: Bunny CDN) lưu cả HTML và trả lời.

👤 Khách ở khu vực server gốcDNS trả về địa chỉ gốc
→
🖥️ Server gốcTrả lời trực tiếp, không đi qua CDN.
👤 Khách ở khu vực khácDNS trả về địa chỉ edge gần nhất
→
☁️ Edge Bunny CDNNếu có bản sao HTML·file thì trả lời tại đây.
→
🖥️ Server gốcChỉ đến đây khi edge không có bản sao.

Cấu trúc và lợi ích của CDN được tổng hợp trong CDN là gì? Lý do dùng CDN và 5 lợi ích (bài viết riêng).

Ⅲ. Cache phía server

Cache phía server là cache gắn vào quá trình WordPress tạo trang sau khi yêu cầu đến server gốc. Server cấu hình Nginx + Apache xử lý yêu cầu theo thứ tự bên dưới, và nếu bước trước tìm thấy bản sao thì bỏ qua các bước sau.

🅐 Khi cache trang có filePhần lớn yêu cầu trang từ khách chưa đăng nhập
① nginx nhận yêu cầuWeb server nhận yêu cầu đến server gốc.
↓
1️⃣ Cache trang ↓② Trả lời bằng file cache trangnginx gửi nguyên file HTML do WP Rocket tạo.x-rocket-nginx-serving-file: HIT
Kết thúc mà không đi qua PHP · OPcache · Redis · MariaDB.
🅑 Khi cache trang không có fileLượt truy cập đầu tiên ngay sau khi xóa cache · màn hình đăng nhập · yêu cầu AJAX
① nginx nhận yêu cầuKhông có file nên chuyển sang Apache.
↓
2️⃣ OPcache ↓② Chạy PHP · OPcacheChạy các file PHP của WordPress dưới dạng bytecode đã biên dịch.
↓
3️⃣ Cache đối tượng ↓③ Cache đối tượng (Redis)Kết quả truy vấn·đối tượng đã lưu được lấy từ Redis.
↓
④ MariaDBChỉ truy vấn dữ liệu không có trong Redis, và đọc dữ liệu hay dùng từ InnoDB buffer pool (bộ nhớ).
↓
⑤ Phản hồi · lưu cache trangGửi HTML hoàn chỉnh và WP Rocket lưu thành file, nên yêu cầu tiếp theo được xử lý theo 🅐.
Theo cấu hình Nginx + Apache (chỉ chuyển sang Apache·PHP khi không có file cache trang), kiểm tra ngày 2026-10-10.

Cấu hình Nginx + Apache có thể chọn làm tùy chọn ở Cloudways và ScalaHosting. Cloudways cho chọn theo từng ứng dụng giữa Hybrid Stack (Nginx + Apache) và Lightning Stack (chỉ Nginx), còn ScalaHosting cho bật thiết lập trong SPanel để đặt Nginx trước Apache.

🖥️ Hosting cho chọn Nginx + Apache
CloudwaysChọn stack cho từng ứng dụng
Hybrid StackNginx + Apache
Lightning StackChỉ Nginx
Cloudways →
ScalaHostingThiết lập web server trong SPanel
Mặc địnhApache
Bật NginxNginx + Apache
ScalaHosting →
CacheLưu gìKhi nào được lưu
1️⃣ Cache trangTrang HTML hoàn chỉnh🅑 ⑤ WP Rocket lưu thành file khi phản hồi
2️⃣ OPcacheMã PHP đã biên dịch (bytecode)🅑 ② Khi file PHP chạy lần đầu
3️⃣ Cache đối tượngMẩu dữ liệu như kết quả truy vấn·tùy chọn🅑 ③ Khi WordPress lấy dữ liệu lần đầu

1️⃣ Cache trang

  • ↪️ Full-page cache hay cache HTML

Cache trang còn gọi là full-page cache, và vì thứ được lưu là HTML nên đôi khi gọi là cache HTML. Toàn bộ trang web do PHP tạo được lưu thành file HTML tĩnh, rồi gửi file đó cho các yêu cầu cùng trang mà không chạy PHP. Đây là trường hợp 🅐 trong thứ tự xử lý ở trên.

Nơi lưu là bộ nhớ server (RAM) hoặc ổ đĩa (HDD/SSD): bộ nhớ nhanh nhưng đắt và dung lượng hạn chế, còn ổ đĩa dư dung lượng nhưng tương đối chậm.

LoạiVí dụCách lưu·phản hồi
Plugin cacheWP Rocket · WP Super Cache · W3 Total Cache · Cache EnablerWordPress lưu trang thành file HTML, và web server gửi file đó.
Cache web serverCache Nginx FastCGI · LiteSpeed CacheWeb server tự lưu phản hồi PHP và gửi cho yêu cầu tiếp theo.
Cache reverse proxyVarnishServer cache đặt trước web server lưu trang và trả lời.

Với Nginx + Apache, nginx trực tiếp đọc và gửi file HTML do WP Rocket tạo, và header phản hồi có thêm [x-rocket-nginx-serving-file: HIT]. Các bước bật và thiết lập cache trang bằng WP Rocket được tổng hợp trong Hướng dẫn cài đặt WP Rocket (bài viết riêng).

2️⃣ OPcache

OPcache lưu bytecode đã biên dịch sẵn từ mã PHP vào bộ nhớ, nên khi chạy lại cùng file thì không phải qua bộ phân tích cú pháp PHP. OPcache có sẵn từ PHP 5.5, còn APC và XCache từng được dùng không hỗ trợ PHP 7 nên nay không còn được dùng. Đây là bước ② của 🅑 trong thứ tự xử lý ở trên.

LoạiTrạng tháiMô tả
Zend OPcacheCó sẵn từ PHP 5.5Cache opcode tiêu chuẩn đang được dùng hiện nay, bật bằng [opcache.enable=1].
OPcache JITNằm trong OPcache từ PHP 8Chuyển bytecode thêm một lần nữa thành mã máy rồi chạy, bật tắt bằng [opcache.jit].
APCNgừng phát triểnCache opcode được dùng trước OPcache; tính năng cache dữ liệu được kế thừa ở APCu.
XCacheNgừng phát triểnKhông hỗ trợ PHP 7.
WinCacheDành cho server Windows (IIS)Cache opcode được tài liệu chính thức WordPress nêu cùng với OPcache.

OPcache được bật bằng thiết lập PHP [opcache.enable=1], còn JIT có từ PHP 8 có thể tắt riêng bằng [opcache.jit=disable]. Cách cài đặt và thiết lập nằm trong Zend OPcache: khái niệm, cài đặt và cấu hình (bài viết riêng).

3️⃣ Cache đối tượng

Cache đối tượng lưu kết quả truy vấn cơ sở dữ liệu hoặc đối tượng đã tính toán vào kho lưu trữ trên bộ nhớ như Redis·Memcached. Mặc định WordPress chỉ ghi nhớ đối tượng trong một yêu cầu, phải gắn kho lưu trữ như Redis thì kết quả mới còn sau khi yêu cầu kết thúc. Đây là bước ③ của 🅑 trong thứ tự xử lý ở trên.

LoạiPhân loạiCòn lại sau khi yêu cầu kết thúc?Mô tả
WP_Object_CacheMặc định của WordPressKhôngCache tích hợp chỉ ghi nhớ trong một yêu cầu.
RedisObject cacheCóKho lưu trữ bộ nhớ riêng, kết nối qua drop-in của plugin Redis Object Cache.
MemcachedObject cacheCóKho lưu trữ bộ nhớ riêng.
APCuObject cacheCó (trong cùng server)Lưu trong bộ nhớ dùng chung của PHP.
FileObject cacheCóLưu thành file trên ổ đĩa.
InnoDB buffer poolCache riêng của cơ sở dữ liệu · không phải cache đối tượngCóMySQL·MariaDB nạp dữ liệu bảng và chỉ mục lên bộ nhớ.
Cache truy vấnCache riêng của cơ sở dữ liệu · không phải cache đối tượng—Đã bị gỡ ở MySQL 8.0; vẫn còn trong MariaDB nhưng mặc định tắt.

WordPress kết nối với Redis qua file drop-in ([object-cache.php]) do plugin Redis Object Cache thêm vào. Quá trình cài đặt nằm trong Cài đặt và thiết lập Redis Cache cho WordPress (bài viết riêng).

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

Đó là do bản sao cũ còn lại trong cache trang hoặc CDN đang trả lời. Hãy xóa cache của bài viết đó trong plugin cache, và nếu dùng CDN thì xóa luôn bản sao trên CDN.

Các plugin cache trang như WP Rocket mặc định không gửi trang đã lưu cho người dùng đã đăng nhập. Màn hình quản trị và các trang khi đăng nhập đều do PHP tạo mới mỗi lần, lúc đó OPcache và cache đối tượng giữ tốc độ.

Trong Chrome, nhấn [Ctrl+Shift+R] ([Cmd+Shift+R] trên Mac) để tải lại trang hiện tại mà không dùng cache. Để xóa toàn bộ cache đã lưu, vào [Thêm] ở góc trên bên phải → [Xóa dữ liệu duyệt web] rồi chọn [Tệp và hình ảnh được lưu trong bộ nhớ đệm].

💾 Bài viết liên quan đến cache 10 bài viết
🗂️ Cache
📋 Cache: định nghĩa và mọi lĩnh vực 📄 Cache website & cache phía server
📋 Hướng dẫn cài đặt WP Rocket 📝 Zend OPcache 📝 Cài đặt Redis Cache
📝 CDN là gì? 📝 Varnish Cache
📋 Kiểm tra tốc độ WP Rocket 📝 Ví dụ cải thiện tốc độ 📝 Plugin cache · tối ưu

ℹ️ 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á.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Prove your humanity: 7   +   4   =