在文章 如何減少nginx+wordpress+mysql架設在windows裡伺服器回應的等待時間(TTFB) 裡是使用 fastcgi_cache 寫入磁碟的方式,來讓網站的暫存得以快取資料進行降低 TTFB。
把快取從傳統的本機硬碟(W 碟)升級到 Redis(記憶體資料庫),是讓 WordPress 在 Windows 下達到極速、徹底解決硬碟 I/O 延遲以及 權限問題 的終極解決方案。
在 Windows 環境中,最穩定且高效的配置方式是:讓 Nginx 保持輕量、由 WordPress 透過 Object Cache 直接對接 Redis。這樣可以繞過 Windows Nginx 缺乏原生 Redis 模組的缺點,同時享受高併發與極速回應(TTFB 大幅下降)。
以下是完整的 Nginx、WordPress 與 Redis 設定指南:
第一步:下載並在 Windows 啟動 Redis
- 下載 Redis:前往 GitHub 下載 tporadowski/redis 的 Windows 綠色免安裝版(
.zip)。或是使用 zkteco-home/redis-windows 的 Windows 綠色免安裝版(本站使用)。 - 解壓縮並啟動:解壓到您的 W 碟(例如
W:\redis)。 - 測試啟動:雙擊
redis-server.exe。如果看到一個由 ASCII 字元組成的立方體圖案,代表 Redis 已經在背景成功監聽127.0.0.1:6379。

第二步:安裝 WordPress Redis 物件快取外掛
有了 Redis 服務後,我們需要讓 WordPress 把資料庫查詢結果(Object Cache)與頁面直接丟給 Redis 處理。
- 在 WordPress 後台搜尋並安裝 Redis Object Cache 外掛(由 Till Krüss 開發)。
- 打開您的
wp-config.php,在最後一行之前,加入 Redis 的連線宣告:
// 設定 WordPress 對接本地 Redis
define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_TIMEOUT', 1 );
define( 'WP_REDIS_READ_TIMEOUT', 1 );
// 【重要】如果您一台伺服器有多個網站,必須加這行前綴區隔記憶體快取
define( 'WP_CACHE_KEY_SALT', 'your_web_site_prod_' );- 回到 WordPress 後台的
設定 > Redis,點擊 「Enable Object Cache (啟用物件快取)」。狀態顯示為Connected即代表成功!
第三步:調整 Nginx 設定(全面改為靜態與代理分離)
既然高頻率的資料庫查詢與頁面都已經由 Redis 記憶體接管,您的 Nginx 就不再需要原本容易出錯的硬碟 fastcgi_cache_path 了。這可以完全避免之前的 W 碟檔案權限衝突與文章存檔時的 JSON 錯誤!
請將 nginx.conf 內,HTTPS 443 的 location ~ \.php$ 區塊還原並優化為以下純淨高效的設定:
# HTTP server: http://your_web_name (純轉址)
server {
# listen 設定這個 server 監聽的 port
listen 80;
listen [::]:80 ;
server_name your_web_name;
root html/your_web_name;
# 將 HTTP 資源永久導向至 HTTPS, 純轉址即可,不需要在這裡放 fastcgi_cache 參數,否則會報錯
return 301 https://$server_name$request_uri;
}
# HTTPS server: https://your_web_name (WordPress 主體)
# For WordPress
server {
# 使用 https 協定
listen 443 ssl;
charset utf-8;
root html/your_web_name;
access_log logs/your_web_name.access.log;
error_log logs/your_web_name.error.log;
index index.php index.html index.htm;
server_name your_web_name.com;
# Windows 環境下,建議憑證路徑使用正斜線 /,避免 \ 被誤判為跳脫字元
# ... 您的 SSL 憑證路徑保持不變 ...
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
# include the "?$args" part so non-default permalinks doesn't break when using query string
#轉址符合SEO 隱藏副檔名
try_files $uri $uri/ /index.php?$args;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
# 靜態檔案快取(直接由 Nginx 處理,極速)直接由 Nginx 快取,不驚動 PHP 與 Redis
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
access_log off;
# 開啟高效傳輸
tcp_nodelay on;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# 處理 WordPress PHP:純代理模式,快取交給 Redis 與 WP-Optimize 處理
location ~ \.php$ {
include fastcgi.conf;
include fastcgi_params;
# 【優化】如果有設定 upstream,請把 127.0.0.1:9000 改為 php_cluster
# 如果沒有設定 upstream,則維持原樣 127.0.0.1:9000
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 允許自訂的 X-Redis-Cache 標頭傳遞給瀏覽器
fastcgi_pass_header X-Redis-Cache;
# 在瀏覽器標頭加入連線提示(因為不由 Nginx 快取,顯示後端連線狀態)
add_header X-Backend-Server "PHP-CGI-Windows";
# 逾時時間維持 60 秒
fastcgi_read_timeout 60s;
fastcgi_connect_timeout 60s;
# 增加緩衝區大小,避免 Windows 下的大頁面傳輸被截斷
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
location ~ /\.(?!well-known).* {
deny all;
}
}修改完成後,請記得手動移除 http 區塊最上方的 fastcgi_cache_path,並重啟 Nginx (nginx -s reload)。
第四步:搭配 WP-Optimize 清理與快取
現有的 WP-Optimize 外掛依然可以完美保留:
- WP-Optimize:負責處理未登入訪客的「前端頁面快取 (Page Cache)」,將網頁以最小的效能開銷生成。
- Redis Object Cache:負責處理後台運算、資料庫查詢、REST API 的「後端記憶體快取 (Object Cache)」。
- Nginx + Upstream:負責以超高併發、平行處理的方式,將請求在零延遲的情況下分流給 PHP。
這樣一來,文章存檔會變得非常順暢,且未登入與已登入用戶的體驗都能同時達到最速。
如何確認有由 redis 取出
要確認 WordPress 是否成功從 Redis 記憶體中讀取資料,與之前由 Nginx 處理的 X-FastCGI-Cache 不同。因為我們現在不透過 Nginx 快取,而是由 WordPress 內部的 PHP 程式碼直接與 Redis 對接。
最簡單、最直覺的檢驗方式有以下兩種:
方法一:直接在網頁原始碼查看(最推薦、免裝外掛)
使用的 Redis Object Cache 外掛,預設會在每個網頁的 HTML 原始碼最末端,自動隱藏塞入一行診斷資訊。
- 打開網站首頁(可使用無痕視窗)。
- 在網頁任意空白處點擊右鍵,選擇 「檢視網頁原始碼」 (或按快捷鍵
Ctrl + U)。 - 捲動到網頁的最底端(最後幾行),您會看到類似以下的 HTML 註解文字:
<!--
Performance optimized by Redis Object Cache. Learn more: https://wprediscache.com
從使用 PhpRedis (v6.2.0) 的 Redis 擷取到 6717 個物件 (總計 2 MB)
-->
<!-- Cached by WP-Optimize (gzip) - https://teamupdraft.com/wp-optimize/ - Last modified: 2026-07-02 10:33 (Asia/Taipei UTC:8) -->只要在最底下有看到 Redis 或 Object Cache 的相關英文字樣,就代表這一頁在 PHP 執行時,已經成功跟 Redis 拿取資料了!
方法二:利用 Nginx 轉發 WordPress 的 Redis 狀態(達成 F12 標頭檢驗)
如果您依然希望在 F12 的 Response Headers(回應標頭) 中看到明確的狀態,我們可以透過在 WordPress 的 functions.php 塞入一行小程式,讓 WordPress 主動告訴 Nginx,再由 Nginx 吐給瀏覽器。
1. 修改 WordPress 佈景主題的 functions.php
請進入您的 WordPress 後台,到 外觀 > 佈景主題檔案編輯器,找到您目前主題的 functions.php,在最底部加上這段程式碼:
add_action('wp_headers', 'add_redis_cache_header');
function add_redis_cache_header($headers) {
// 檢查 Redis 全域變數是否存在且已連線
global $wp_object_cache;
if (isset($wp_object_cache) && method_exists($wp_object_cache, 'get_redis_version')) {
$headers['X-Redis-Cache'] = 'HIT (Redis Memory)';
} else {
$headers['X-Redis-Cache'] = 'MISS (Database Fallback)';
}
return $headers;
}2.修改 Nginx 設定檔
接著打開您的 nginx.conf,在 location ~ \.php$ 區塊中,加入以下這行,允許後端 PHP 自訂的標頭能夠傳遞給瀏覽器:
location ~ \.php$ {
# ... 您原本的其他設定 ...
# 允許轉發 WordPress 送過來的 X-Redis-Cache 標頭
fastcgi_pass_header X-Redis-Cache;
# ... 您原本的其他設定 ...
}修改後請重啟 Nginx (nginx -s reload)。
3. 測試 F12 效果
現在可以打開瀏覽器按下 F12,切換到 Network (網路),重新整理網頁並點擊第一個請求。就會在 Response Headers 中,看到夢寐以求的:X-Redis-Cache: HIT (Redis Memory) 囉!
可以先試試 方法一,看看網頁最底下有沒有出現 Redis 的隱藏註解。
NGINX helper 外掛設定前置詞 (Redis Key Prefix)
在改用 Redis 物件快取 搭配 WP-Optimize 前端快取 之後,「前置詞 (Redis Key Prefix)」 扮演了極為關鍵的角色。它的主要作用是確保 Redis 記憶體中,這台主機的快取資料不會與其他網站(或測試站)混在一起。
同時,由於您現在已經不使用 Nginx 端的 FastCGI 硬碟快取(改由 Redis 處理後端、WP-Optimize 處理前端 HTML),Nginx Helper 外掛中的「Nginx 設定(Nginx Settings)」區塊,在功能上其實已經功成身退。
為了保持系統的純淨與運作邏輯正確,以下是前置詞的設定方式以及目前的完整配置說明:
1. 「前置詞」應該設定為什麼?
前置詞的設定必須在 WordPress 的 wp-config.php 檔案中定義。
因為您的網站網址是 your_website_name,建議使用具有辨識度的獨一無二小寫代號加底線。
請將以下程式碼加入到您的 wp-config.php 中:
// Redis 專用的唯一前置詞,避免多個網站時記憶體資料發生衝突
define( 'WP_CACHE_KEY_SALT', 'your_website_name_' );設定好此常數後,WordPress Redis Object Cache 外掛就會自動在寫入 Redis 的每一筆資料前加上 your_website_name_。
2. Nginx Helper 外掛中的「Nginx 設定」該如何處理?
因為已經在 nginx.conf 中刪除了 fastcgi_cache WORDPRESS; 這些硬碟快取指令,Nginx Helper 的自動清理功能在當前架構下「不需要啟用」。
- 為什麼?
因為現在前端快取已經交給 WP-Optimize(它內建就會在發布文章時自動清理快取),後端快取交給 Redis(它會常駐記憶體並自動同步)。 - 正確的 Nginx Helper 設定:
在 WordPress 後台的工具 > Nginx Helper中,建議直接將 「Enable Purge」取消勾選(關閉)。
最終的 WordPress 外掛分工
- Redis Object Cache 外掛:保持啟用(Status: Connected)。負責接管所有的資料庫與後端查詢。
- WP-Optimize 外掛:在
Cache頁面中開啟 Enable page caching。它會負責把首頁與各文章自動存成快取,且在您發布新文章時,它會自動完成全站清理,完全不會跳出 JSON 錯誤。 - Nginx Helper 外掛:在此 Redis 架構下,可以直接停用(Disable Purge)或將其解安裝。
請試著將 前置詞 (WP_CACHE_KEY_SALT) 加入 wp-config.php,並在 WP-Optimize 中啟用頁面快取。




