本文將介紹如何透過寶塔面板在Nginx中啟用fastcgi_cache緩存,以提升WordPress網站的存取速度和減輕伺服器負擔。我們將簡要介紹fastcgi_cache快取的概念和作用,然後我們將詳細指導如何在寶塔面板中配置Nginx以啟用fastcgi_cache緩存,設定外掛程式。
什麼是fastcgi_cache快取?
fastcgi_cache是Nginx提供的一種快取機制,用來提升動態內容的效能。它特別適合處理FastCGI協定的應用,例如PHP(Wordpress)。 fastcgi_cache從系統層面實現網頁靜態化,大幅減少伺服器負擔、並發能力以及提供提高網站載入速度。
fastcgi_cache快取有啥優點?
很多人會好奇,對Wordpress來說,fastcgi_cache快取跟常規透過Wp Rocket等外掛實現快取有啥差別? fastcgi_cache快取是系統層面緩存,僅由Nginx處理(PHP不參與),因此速度很快,能承擔很多並發。缺點是沒那麼靈活、功能少、有點使用門檻,所以小白很少聽到這個緩存。
透過WP Rocket等插件實現的快取是軟體層面的緩存,由PHP處理(Nginx不參與),因此速度慢一些,佔用伺服器資源多。優點是透過插件控制,易用易懂、非常靈活,功能豐富,大眾最愛。
我們經常跟伺服器打交道,處理高並發、卡頓問題。絕大部分時候記憶體耗盡或CPU超負荷都是因為PHP在運行龐大任務導致。 fastcgi_cache快取不需要運作PHP,因此佔用資源少很多,大大減輕伺服器負擔。
同時fastcgi_cache快取由Nginx處理,所以運算連結比Wp Rocket等外掛程式實現的快取短很多,因此速度更快。 fastcgi_cache快取有些環境甚至比Litespeed cache快取還快!
各種快取平均回應時間對比↓(越短越好):
注意:FastCGI_Cache對伺服器效能要求高,如果是1H1G之類低配置,再怎麼優化效果也不明顯。如果網站動態資料較多,不建議使用FastCGI_Cache快取。
現在大部分人建站使用寶塔面板,便捷省事。下面分享寶塔面板開啟FastCGI_Cache快取方法。
注意:由於FastCGI_Cache會快取PHP請求,可能會導致網站異常。例如閱讀量計數失效、快取評論者資訊、快取登陸介面等,需要添加額外程式碼排除。因此不建議新手使用FastCGI_Cache快取。 FastCGI_Cache快取需要使用專門快取外掛。
Nginx如何啟用fastcgi_cache快取
寶塔面板預設編譯了Nginx ngx_cache_purge 模組,無需額外安裝,直接按下面教學操作即可。
全域設定
1登入寶塔後台,在軟體商店找到Nginx,點選設定按鈕,在「設定修改」裡加入以下內容:
fastcgi_cache_path /tmp/wpcache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=1G;
fastcgi_temp_path /tmp/wpcache/temp;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
#忽略一切 nocache 申明,避免不缓存伪静态等
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
加好之後截圖如下:
網站設定
在寶塔後台網站清單中找到對應網站,點選「設定」按鈕,將以下程式碼加入設定檔中,第43行輸入網站伺服器IP(外網)位址。程式碼要按需調整!不同網站情況不一樣!再次勸退小白。
set $skip_cache 0;
#post 访问不缓存
if ($request_method = POST) {
set $skip_cache 1;
}
#动态查询不缓存
if ($query_string != "") {
set $skip_cache 1;
}
#后台等特定页面不缓存(其他需求请自行添加即可)
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
set $skip_cache 1;
}
#对登录用户、评论过的用户不展示缓存
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
set $skip_cache 1;
}
#这里请参考你网站之前的配置,特别是sock的路径,弄错会显示502!如果你的网站使用PHP7.4,就写-74.sock
location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi-74.sock;
fastcgi_index index.php;
include fastcgi.conf;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
#新增的缓存规则
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header X-Cache "$upstream_cache_status From $host";
fastcgi_cache WORDPRESS;
add_header Cache-Control max-age=0;
add_header Nginx-Cache "$upstream_cache_status";
add_header Last-Modified $date_gmt;
add_header X-Frame-Options SAMEORIGIN; # 只允许本站用 frame 来嵌套
add_header X-Content-Type-Options nosniff; # 禁止嗅探文件类型
add_header X-XSS-Protection "1; mode=block"; # XSS 保护
etag on;
fastcgi_cache_valid 200 301 302 1d;
}
#缓存清理配置
location ~ /purge(/.*) {
allow 127.0.0.1;
allow "服务器外网IP"; # 引号要保留
deny all;
fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
}
加好之後截圖如下:
新增完後儲存,重啟Nginx就行,接下來是安裝設定快取外掛↓。
安裝WordPress清理快取插件
FastCGI_Cache無法自動及時精準清理網站緩存,所以需要安裝配套快取外掛程式自動控制刷新快取。後台搜尋、安裝Nginx 助手插件,這個插件專門為fastcgi_cache快取打造。
插件設定參考下圖(圖片來源: 張戈部落格)。
清理模式選擇Delete local server cache files,直接從伺服器刪除快取檔案然後重新產生。
我朋友奶爸建站測試發現Nginx fastcgi_cache快取(404ms)速度比WP Super Cache + Memcached Object Cache快取(455ms)快一點.
判斷快取狀態
使用瀏覽器隱身模式開啟網站前台(未登入狀態),按F12 進入開發者工具> 「網路」 > 點網址> 點「標頭」查看詳情。
HIT:快取成功
MISS:快取失敗,建議刷新頁面2次看下有沒有變成HIT。
BYPASS:跳過快取
EXPIRED:快取過期
進階教程
其實fastcgi_cache快取也可以和Wp Rocket快取外掛一起使用。配合使用的效果比單獨使用Wp Rocket高27%左右,比單獨使用fastcgi_cache快取相差無幾。只要安裝rocket-nginx,適當配置就行。這個方法使用門檻高,不懂別用。
在〈宝塔面板Nginx如何启用fastcgi_cache缓存? WordPress提速〉中有 8 則留言
感謝教學!我按照流程做了一遍,發現開啟成功後,訪問首頁會自動跳到:/wp-admin/setup-config.php 顯示: 文件
wp-config.php
已經存在。如果您希望重設該檔案中的任何設定項目,請先刪除該檔案。您可以現在安裝。 但管理員已登入狀態下造訪首頁不會跳轉。wp-config.php檔案是否在根目錄(名字為網址的那個資料夾)?這個問題通常是你安裝wordpress時把系統檔案放錯位置導致。如果wp-config.php檔案位置正確,試試看清理緩存,停用所有外掛程式排查是否插件問題。
確認不是瀏覽器快取的事,而且我是新建站測試,所有插件關閉也是這個問題。我這邊剛測試了下,只要刪掉網站的設定檔中新增的關於fastcgi_cache快取的程式碼,首頁就立即可以存取;新增就會跳轉提示
wp-config.php
已經存在。我英文也搜了很久,沒有找到答案。我快崩潰了…… 😭wp-config.php檔案是否在根目錄(名字為網址的那個資料夾)?先確定下。可能配置程式碼複製錯了?檢查下。
找到原因了,nginx沒編譯安裝
欲哭无泪…
您好,按您設定成功後,wordpress後台的「工具」-「網站健康」中出現如下報錯,請問如何解決? REST API遇到了預料之外的結果效能REST API 是WordPress 及其他應用與伺服器通訊的一種途徑。例如,區塊編輯器頁面就依賴REST API 來顯示及儲存您的頁面和文章。當測試REST API 時傳回了預期之外的結果:REST API 端點:我的網站網址/index.php/wp-json/wp/v2/types/post?context=editREST API 回應:(404) Not Found
您好,導致REST API出錯的原因有很多,不一定是因為 Fastcgi_cache快取。建議逐一停用外掛程式、切換到預設主題看下問題是否解決。如果確定是 Fastcgi_cache快取的問題請回覆此評論。
很多時候REST API沒啥作用,如果不影響網站功能之類建議適當忽略此錯誤。