本文将介绍如何通过宝塔面板在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,适当配置就行。这个方法使用门槛高,不懂别用。