针对 Nginx FastCGI 缓存方式的改进

2019-08-1517:12:58 6 344
摘要

相对于那些缓存插件,基于Nginx的FastCGI缓存方式优点还是非常多的,在减轻服务器压力方面表现是相当的优秀,如果你的服务器经常出现负载飚升一类现象,倒是非常建议试试FastCGI缓存方式让你的服务器更加的稳定高效。

自【开启 Nginx 的 FastCGI Cache 缓存,加速 WordPress 伪静态页面】一文发布以来,明月已经在多个服务器、WordPress 站点上使用了,效果可以说是出奇的好,既满足了伪静态缓存的需求,又在安全性上让我很满意,所以明月果断给所有我托管的站点、服务器都使用了 FastCGI 缓存。截止到今天,明月还是发现了几个小问题,虽然影响都不大,好在都找到了解决和改进的办法。

针对 Nginx FastCGI 缓存方式的改进

首先发现的第一个问题就是柒比贰 seven 主题下,FastCGI 缓存会造成首页侧边栏为空的问题,产生的原因感觉应该是柒比贰 seven 主题首页侧边栏调用机制问题造成的,解决起来也简单就是不缓存站点首页即可,只需要修改【开启 Nginx 的 FastCGI Cache 缓存,加速 WordPress 伪静态页面】一文里“后台等特定页面不缓存(其他需求请自行添加即可)”规则即可,具体修改后的代码如下:

  1. #后台等特定页面不缓存(其他需求请自行添加即可)
  2. if ($request_uri ~* "^/$|/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
  3.     set $skip_cache 1;
  4. }

细心的站长可能注意到了,上述代码奇石就是对$request_uri 变量结果判断条件里加了“^/$”而已,这个“^/$”意思就是指 https://service.imydl.com/这样的结果,也就是站点的首页了。这样以来首页就不会再被缓存,柒比贰 seven 主题下首页浏览也就正常了。

针对 Nginx FastCGI 缓存方式的改进

其次,就是发现在 Begin 主题下,FastCGI 缓存会造成移动端、PC 端自适应紊乱的现象,主要就是从菜单导航栏发现得,移动端和 PC 端的菜单导航栏是会随着不同设备的访问不同而不同的,明月就发现在手机端,点击菜单图标展开的不是熟悉的移动端菜单而是近似 PC 端似的下拉式菜单,考虑到移动端用户体验,明月感觉有必要移动端不缓存,只需要在上面修改的代码的上方插入下面的代码即可不缓存移动端页面了:

  1. #不缓存移动端访问
  2. if ($http_user_agent ~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry|windows\s(ce|phone))) {
  3.         set $skip_cache 1;
  4. }

这样自适应主题,特别是 Begin 主题移动端访问的菜单就正常了,虽然这样一来移动端就无法享受缓存带来的高速了,但提升了移动端的浏览体验还是非常重要的,再加上大部分个人博客移动端流量都不高(明月的移动端流量就不高!),对比之下这点儿速度上的损失也就真的不算什么了。

再次,明月还发现 FastCGI 缓存可以针对页面返回的 HTTP 状态码来指定缓存时间,也就是下面这段代码:

  1. fastcgi_cache_valid 200 301 302 1d;

那么,我们完全可以给不同的状态码分配不同的缓存时间,如下面的代码:

  1. fastcgi_cache_valid 200 12h;
  2. fastcgi_cache_valid 301 302 3d;
  3. fastcgi_cache_valid 304 1d;

这样的效果如何,明月也是刚刚开始使用,还要看具体的数据表现,理论上这样可以提升服务器端的运行效率,哪怕是一种“压榨”也是聊胜于无嘛。

上述这些就是最近明月使用 FastCGI 缓存以来总结的几个改进了,如果您觉得有用,就拿去用吧!

针对 Nginx FastCGI 缓存方式的改进

最后我们再来说一下 FastCGI 缓存方式配套的 WordPress 插件 Nginx Helper(插件页面),这个插件主要的作用就是负责清理缓存的,像 WordPress 下发表评论、回复评论、登录等等动态请求都需要及时的清理缓存来显示最新的动态数据(比如:评论),如果你的站点是必须登录后才能发表评论的话,这个插件基本上就不需要了,因为在 Nginx 里登录用户已经是不缓存了!Nginx Helper 插件另一个好处就是可以在 WordPress 后台进行手动清除缓存,这点儿对于经常折腾 CSS、JS 这些前端代码的站点来说还是很有必要的。大家可以根据自己站点的实际情况来灵活的取舍这个插件就是了。另外 Nginx 里需要重新编译添加的 ngx_cache_purge-2.3 模块跟 Nginx Helper 插件是相互配套的,也就是必须确保 Nginx 里有 ngx_cache_purge-2.3 模块才能使用 Nginx Helper 插件,大家不要搞混淆了。Nginx Helper 插件设置里 Purge Method 应该选用“Using a GET request to PURGE/url (Default option)”还是“Delete local server cache files”,这个取决于你的站点是否使用了 CDN,如果使用了 CDN 就选择“Delete local server cache files”,如果没有使用 CDN 选择“Using a GET request to PURGE/url (Default option)”即可。

针对 Nginx FastCGI 缓存方式的改进

相对于那些缓存插件,基于 Nginx 的 FastCGI 缓存方式优点还是非常多的,在减轻服务器压力方面表现是相当的优秀,如果你的服务器经常出现负载飚升一类现象,倒是非常建议试试 FastCGI 缓存方式让你的服务器更加的稳定高效。

历史文章推荐:

  • 本博客公众号
  • 扫一扫关注!
  • weinxin
  • 本博客小程序
  • 微信内浏览本博客
  • weinxin

发表评论

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

目前评论:6   其中:访客  3   博主  3

    • 老杨 老杨 1

      曾经折腾过,然而没处理好,评论者信息都缓存/错乱了……

        • 明月登楼 明月登楼 Admin

          @老杨 这个只需要不缓存发表过评论的即可!做好不缓存规则判定就是了!

            • 老杨 老杨 0

              @明月登楼 规则里有不缓存评论,搞不懂为什么会把评论者信息缓存进去了,不知道是不是与主题评论框结构有关系。

                • 明月登楼 明月登楼 Admin

                  @老杨 是的,跟主题评论结构有关系,只能你自己排查了!

            • boke112导航 boke112导航 9

              现在站点流量不高服务器负载还行的情况下,我都没有动力去折腾这些,等哪天有压力的情况下再去折腾了