本文將介紹如何通過寶塔面板在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會緩存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.socklocation ~ [^/]\.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 Helper插件,這個插件專門為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,適當配置就行。這個方法使用門檻高,不懂別用。