Nginx开启fastcgi_cache缓存加速,支持html伪静态页面

张戈博客不久前分享过Nginx开启缓存为WordPress加速的教程,其中分享了2种缓存模式:代理模式和本地模式。我一直以为单个 ngx_cache_purge 缓存模块只支持proxy代理模式,结果热心的网友回复,其实这个模块也是支持本地缓存的,而且WordPress还有配套的插件!

Nginx开启fastcgi_cache缓存加速,支持html伪静态页面

看来还是我孤陋寡闻了!

我像发现了新大陆一般,立马进入折腾状态,幸不辱命,已经成功部署!最爽的是可以通过插件来自动清理文章的对应缓存,解决了前文清理缓存的历史遗留问题。

一、添加模块

本文分享的 Nginx 缓存需要额外编译 ngx_cache_purge 模块。至于下载模块、重新编译以及平滑升级前文已经分享过了,本文就不再赘述了。不会的朋友可以参考前文:

为网站开启Nginx缓存加速,支持html伪静态页面

Ps:需要重新编译Nginx,在原有的编译参数上新增一个 ngx_cache_purge 模块,比如:

--add-module=../ngx_cache_purge-2.3

不清楚怎么重新编译和平滑升级的的请参考前文进行操作。

二、Nginx配置

要用这个缓存功能,建议重新弄一个 server 模块(替换之前的),如下代码是张戈博客目前正在使用的规则(已删除了我自定义的伪静态规则,避免混淆视听):

请仔细阅读代码中的所有注释,该修改的修改,该创建的创建,该补充的根据实际情况补充,否则使用之后又来找张戈吐槽各种问题了!

三、安装插件

上文已经提到了 fastcgi_cache 有一个量身定做的WordPress缓存清理插件:Nginx Helper

所以,接下来我们就去安装这个插件 。非常简单,直接进入WordPress后台插件安装界面搜索 Nginx Helper 关键词在线安装即可。

安装后,从后台【工具】==>【Nginx Helper】打开插件设置界面如下所示:

Nginx开启fastcgi_cache缓存加速,支持html伪静态页面

Ps:顺带说一下后面2项的含义:

记录插件日志:勾选这个选项后,插件设置下面会显示日志记录存放路径。这个功能主要用来测试插件的设置,比如去已缓存的文字发表一个新的评论,然后看下日志里面是否出现删除记录。

插入缓存信息:勾选这个选项后,前台页面的源代码底部将插入页面的缓存信息,类似如下:

勾上第启用缓存清理后,将出现如下选项:Nginx开启fastcgi_cache缓存加速,支持html伪静态页面

该怎么设置,应该看图就懂了吧?否则张戈苦逼的用中文标注了半天就白费功夫了!

清理模式选择

上图我也标注的比较清楚了,还是详细解释一下吧!

①、purge模式

这个模式需要保留上文 Nginx 配置中的 purge 清理路径,清理的时候会产生一个请求。

出于安全考虑,一般 purge 都不会完全开放!只有特定的 IP 可以访问,所以,如果用了CDN的朋友,再使用模式一,则需要在服务器上的 /etc/hosts 中将网站域名解析为服务器真实IP,以便插件直接请求purge路径,而不用走CDN节点,避免请求被拒绝。还是没搞懂的话就放弃这个模式吧!

②、文件模式

模式二是直接清理对应的缓存文件,不需要请求 purge这个清理路径,所以使用模式二,不需要配置上文 Nginx 的 purge 规则(我个人推荐使用这个模式)。

由于插件作者定义的缓存路径是 /var/run/nginx-cache ,而我们可能会根据服务器实际情况来自定义缓存路径,这样一来,缓存路径的不同就会导致插件无法找到缓存文件并删除!

解决办法:

很简单,在WordPress根目录下的wp-config.php中新增如下代码即可:

Ps:不知道添加到第几行的话,可以添加到 define('WPLANG', 'zh_CN'); 的后面即可。添加后建议重载一下php,确保变量生效(主要针对开启了PHP缓存的网站)。

三、效果预览

①、缓存效果

替换新的配置,并且重载Nginx之后,访问前台页面,查看header,会多出一个X-Cache 标志。

X-Cache 一般会有3个状态:MISS、HIT、BYPASS。

  • MISS表示未命中

即这个页面还没被缓存,新发布或刚被删除的页面,首次访问将出现这个状态(图略)。

  • HIT表示缓存命中

打开一个会缓存的页面,比如文章内容html页面,F5刷新几次即可在F12开发者模式当中的Header头部信息中看到如图缓存命中状态:

Nginx开启fastcgi_cache缓存加速,支持html伪静态页面

  • BYPASS表示缓存黑名单

即页面路径在Nginx规则中被设置成不缓存(set $skip_cache 1;),比如WP后台,查看header:

Nginx开启fastcgi_cache缓存加速,支持html伪静态页面

如果你发现想要缓存的页面却是这个状态,就可以去检查排除规则中是不是包含了这个路径!反之,如果你发现后台登录不了,或者各种登陆态丢失问题,则应该到排除规则中加上该页面路径的关键字。

②、清理效果

这个插件和缓存的搭配非常好用,不管我们是发布文章,还是有人发表评论,插件都能根据我们的设置来清理对应的缓存!比如有人发表了一个自动审核通过的评论(或博主审核通过一条评论),插件将会自动删除评论相关的文章缓存,具体看下上图张戈贴出的标注即可。

如何查看插件是否正常工作呢?很简单,勾选开启插件日志,然后去点击更新一篇旧文章,最后打开插件日志即可看到是否删除记录。

用Linux的朋友,可以直接使用tailf命令查看该日志,然后去更新文章即可看到效果,如下图所示:

Nginx开启fastcgi_cache缓存加速,支持html伪静态页面

至于要证实是否真的删除了缓存,我们可以先打开浏览器的开发者模式,定位到network界面,然后访问刚刚更新的文章,即可看到如下状态:

Nginx开启fastcgi_cache缓存加速,支持html伪静态页面

很明显,缓存已被成功删除,首页看都不用看,肯定也是这个状态了。

好了,本文就分享到这,如果对网站缓存感兴趣的朋友,可以继续翻看张戈博客的相关文章:

Ps:当然,东西肯定是越用越好,目前张戈博客也取消了以前的各种缓存,比如php代码缓存等。

最后感谢一下在我博客留言告知的【wordpress优化】站长!总之一句话,如果发现新的WordPress折腾目标,你不会折腾的话,可以留言告诉张戈。

发表评论

gravatar

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

刷新评论

目前评论:108   其中:访客  75   博主  33

  1. 刘某某博客 1 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

    为什么按文章的方法配置之后发现,前台页面第一次访问、后台页面访问都巨慢务必,16秒+,效果恐怖啊,主要是Waiting (TTFB)部分等待时间长。前台HIT之后倒是速度很快。配置之前倒是很快。另外,文中的

    地方,是引入的nginx默认的fastcgi.conf,还是下面的几行配置就是这个文件的内容?

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省深圳市 电信

      不可能巨慢。。肯定是你配置错了。

  2. 小五 1 来自天朝的朋友 火狐浏览器 Windows 7 湖北省武汉市 电信

    来膜拜dalao的教程,很给力,有个小问题,文章底部的外链,跳转到不可描述网站了~改了吧~

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省广州市 电信

      感谢告知。。挺坑

  3. 启明 2 来自天朝的朋友 谷歌浏览器 Windows 7 江苏省徐州市 联通

    嗨 博主按你的教程使用了这个插件,添加nginx模块,但是检查Head的时候我这里并没有发现有X-CACHE啊??是不是没有生效?怎么可以判断呢?请指点 谢谢

    对了 还有expires 这个是怎么实现的?看过YS的网页优化里建议有这一条,百度了一下配置上去了,在检测首页的时候可以看到,但是在文章页面的时候就没有了,是我设置有问题么?谢谢
    编辑一下回复.
    刚百度了一下 发现这篇文章
    http://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/
    好像明白了点什么,但是又抓不到关键的地方,,博主能否给点帮助?谢谢

  4. yigehaobb 1 来自天朝的朋友 谷歌浏览器 Windows 10 山东省 联通

    redis fastcgi wp-super w3-total 哪个缓存好些

加载中,请稍候...