網站快取 & 伺服器內部快取:WordPress 快取的運作方式

在 Nginx + Apache 伺服器上檢查網站快取與伺服器內部快取後發現,WordPress 的頁面要求會從瀏覽器開始,依序往下經過 CDN、頁面快取、OPcache、Redis,並在有副本的那一層停下。直接進入原始伺服器的頁面要求,由 nginx 直接送出 WP Rocket 產生的 HTML 檔案,不會往下到 PHP 與資料庫。
Ⅰ. WordPress 快取結構
在電腦中,快取是暫時存放資料以便快速存取的技術,在網路上也以同樣的原理運作,對提升效能有很大的幫助。
快取把資料存起來,訪客造訪網站時就不必每次都向伺服器重新要求,而是快速讀取已儲存的資料,縮短頁面載入時間。這樣能減輕伺服器負載,並改善使用者體驗。
WordPress 要求所使用的快取分為網站快取與伺服器內部快取兩大類。 HTTP 快取標準將只存放在單一訪客瀏覽器中的快取分為 private cache,把多位訪客共用的 CDN·代理快取分為 shared cache,本文將這兩者合稱為網站快取。
頁面快取、OPcache 與物件快取,是附加在伺服器內 WordPress 執行過程中的快取。HTTP 標準沒有另外分類,而 WordPress 官方文件則分為快取外掛(頁面快取)、物件快取、伺服器快取(OPcache 這類 opcode 快取)來說明。
快取被使用的所有領域,整理在 快取:定義與快取被使用的所有領域 這篇文章;包含快取在內的效能最佳化四大類,則整理在 網頁效能最佳化:結構與定義 這篇文章。
在下方模擬器中,從左側樹狀圖選擇快取並按下標籤,就能看到要求在哪一層停下。WordPress 網站管理者用快取外掛最先開啟的是頁面快取。
| 層 | 儲存位置 | 儲存內容 | Nginx + Apache 範例 |
|---|---|---|---|
| 瀏覽器快取 | 訪客裝置 | HTML·CSS·JS·圖片·字型 | CSS·圖片 7 天 |
| CDN·代理快取 | 伺服器前端(邊緣節點·反向代理) | 頁面·靜態檔案副本 | Bunny CDN |
| 頁面快取 | 伺服器磁碟·記憶體 | PHP 產生的 HTML | WP Rocket + nginx |
| OPcache | 伺服器記憶體 | PHP 位元組碼 | PHP 8.3,JIT 關閉 |
| 物件快取 | 伺服器記憶體 | 查詢結果·物件 | Redis |
Ⅱ. 網站快取
網站快取,是伺服器透過回應標頭告知儲存方式後,訪客的瀏覽器與 CDN·代理依照指示存放副本的快取。代表性的標頭有 [Cache-Control]·[ETag]·[Expires],儲存期限過後,會用條件式要求([304 Not Modified])確認是否有變更。
1️⃣ 瀏覽器快取
瀏覽器快取是存放在訪客網頁瀏覽器中的 HTTP 快取,會儲存 HTML·CSS·JavaScript·圖片·字型,再次要求同一個資源時,不是完全不連到伺服器,就是只確認是否有變更。
儲存期限由伺服器決定,而不是訪客。下方的 Nginx + Apache 伺服器對 CSS 與圖片指示保存 7 天,HTML 頁面則不給期限,回應成每次再造訪時都要確認。
If-None-Match: "6ab12775-2ee8"cache-control: max-age=604800 expires: Sat, 17 Oct 2026 03:21:00 GMT etag: "6ab12775-2ee8"
etag: "6ac9298c-95575" last-modified: Fri, 09 Oct 2026 17:51:08 GMT
2️⃣ CDN · 代理快取
CDN·代理快取位於訪客與原始伺服器之間,由多位訪客共用。正向代理像企業網路那樣位在訪客端前方,反向代理與 CDN 則位在伺服器前方,以儲存的副本代替原始伺服器回應。
代表性的反向代理是 Varnish Cache,Bunny CDN·Akamai 等 CDN 也採用相同結構。使用分地區 DNS 時,可以讓原始伺服器所在地區的訪客直接連到原始伺服器,其他地區的訪客則由最近的 CDN 邊緣節點(例如 Bunny CDN)連同 HTML 一起儲存並回應。
CDN 的結構與好處,整理在 什麼是 CDN?使用 CDN 的理由與 5 個好處 這篇文章。
Ⅲ. 伺服器內部快取
伺服器內部快取,是要求抵達原始伺服器後,附加在 WordPress 產生頁面過程中的快取。以 Nginx + Apache 架構的伺服器依下列順序處理要求,前面的步驟找到副本,就不會經過後面的步驟。
Cloudways 與 ScalaHosting 都能把 Nginx + Apache 架構當作選項來選擇。Cloudways 可在每個應用程式選擇 Hybrid Stack(Nginx + Apache)或 Lightning Stack(只有 Nginx),ScalaHosting 則可在 SPanel 開啟在 Apache 前面加上 Nginx 的設定。
| 快取 | 儲存內容 | 儲存時機 |
|---|---|---|
| 1️⃣ 頁面快取 | 完成的 HTML 頁面 | 🅑 ⑤ 回應時由 WP Rocket 存成檔案 |
| 2️⃣ OPcache | 編譯好的 PHP 程式碼(位元組碼) | 🅑 ② 第一次執行 PHP 檔案時 |
| 3️⃣ 物件快取 | 查詢結果·選項等資料片段 | 🅑 ③ WordPress 第一次取出資料時 |
1️⃣ 頁面快取
頁面快取也稱為全頁快取(full-page cache),因為存的是 HTML,也有人稱為 HTML 快取。它把 PHP 產生的整個網頁存成靜態 HTML 檔案,同一個頁面要求進來時不執行 PHP,直接送出這個檔案。這是上面處理順序中 🅐 的情況。
儲存位置是伺服器記憶體(RAM)或磁碟(HDD/SSD);記憶體速度快,但成本高、容量有限,磁碟容量充足,但相對較慢。
| 類型 | 範例 | 儲存·回應方式 |
|---|---|---|
| 快取外掛 | WP Rocket · WP Super Cache · W3 Total Cache · Cache Enabler | WordPress 把頁面存成 HTML 檔案,由網頁伺服器送出該檔案。 |
| 網頁伺服器快取 | Nginx FastCGI 快取 · LiteSpeed Cache | 網頁伺服器直接儲存 PHP 的回應,送給下一個要求。 |
| 反向代理快取 | Varnish | 放在網頁伺服器前面的快取伺服器儲存頁面並回應。 |
在 Nginx + Apache 架構下,nginx 會直接讀取並送出 WP Rocket 產生的 HTML 檔案,回應標頭會加上 [x-rocket-nginx-serving-file: HIT]。用 WP Rocket 開啟並設定頁面快取的步驟,整理在 WP Rocket 設定教學 這篇文章。
2️⃣ OPcache
OPcache 把預先編譯好的 PHP 位元組碼存在記憶體,再次執行同一個檔案時就不必經過 PHP 剖析器。它從 PHP 5.5 起就內建,以前使用的 APC 與 XCache 不支援 PHP 7,現在已經不用了。這相當於上面處理順序 🅑 的第 ② 步。
| 類型 | 狀態 | 說明 |
|---|---|---|
| Zend OPcache | PHP 5.5 起內建 | 目前使用的標準 opcode 快取,以 [opcache.enable=1] 開啟。 |
| OPcache JIT | PHP 8 起包含在 OPcache 中 | 把位元組碼再轉成機器碼執行,以 [opcache.jit] 開關。 |
| APC | 已停止開發 | OPcache 之前使用的 opcode 快取,資料快取功能由 APCu 延續。 |
| XCache | 已停止開發 | 不支援 PHP 7。 |
| WinCache | Windows(IIS)伺服器用 | WordPress 官方文件與 OPcache 一起列出的 opcode 快取。 |
OPcache 以 PHP 設定 [opcache.enable=1] 開啟,PHP 8 之後加入的 JIT 可用 [opcache.jit=disable] 另外關閉。安裝與設定請參考 Zend OPcache 概念與安裝設定 這篇文章。
3️⃣ 物件快取
物件快取把資料庫查詢結果或計算好的物件存到 Redis·Memcached 這類記憶體儲存區。WordPress 預設只在單一要求內記住物件,要接上 Redis 這類儲存區,結果才會在要求結束後保留下來。這相當於上面處理順序 🅑 的第 ③ 步。
| 類型 | 類別 | 要求結束後是否保留 | 說明 |
|---|---|---|---|
| WP_Object_Cache | WordPress 預設 | 否 | 只在單一要求內記住的內建快取。 |
| Redis | 物件快取 | 是 | 獨立的記憶體儲存區,透過 Redis Object Cache 外掛的 drop-in 連接。 |
| Memcached | 物件快取 | 是 | 獨立的記憶體儲存區。 |
| APCu | 物件快取 | 是(同一台伺服器內) | 存放在 PHP 使用的共享記憶體。 |
| 檔案 | 物件快取 | 是 | 以檔案形式存放在磁碟。 |
| InnoDB 緩衝池 | 資料庫自身的快取 · 不是物件快取 | 是 | MySQL·MariaDB 把資料表資料與索引載入記憶體。 |
| 查詢快取 | 資料庫自身的快取 · 不是物件快取 | — | MySQL 8.0 已移除,MariaDB 仍保留但預設關閉。 |
WordPress 透過 Redis Object Cache 外掛加入的 drop-in 檔案([object-cache.php])連接 Redis。安裝過程請參考 WordPress Redis Cache 安裝與設定 這篇文章。
🔢 FAQ & 推薦內容
ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。








