php平滑重启nginx,彻底清除WordPress的静态缓存

每一次分享技术文章,都是基于自己的痛点,基于自己的需求。这次也一样,所以分享具体方法之前,我先说一下我这次的需求与痛点:

一、需求痛点

在博客集成了代码版缓存功能之后,为了方便在前台清理页面缓存,我特意写了ajax清理缓存的功能相关文章)。这个功能写好之后确实可以正常工作。

但是,为了让网站加载速度提升到极致,我还在nginx里面加了类似于WP Super Cache的mod_rewrite机制:当存在页面缓存时,会绕过PHP解析,而直接调取缓存在前台展示。

这样就发现了一个问题:当我在前台点击缓存清理后,后台的页面缓存文件确实是删除了,但是nginx却在内存里面缓存了一份!!从而导致一段时间内怎么刷新页面,展示的依然是缓存内容!这样一来,不管是我还是用户,点击前台这个清理按钮根本就不能实时看到效果,明显就鸡肋了!

我发现这个问题的做法是,点击按钮删除缓存,然后进入Linux系统去reload一下nginx,才能彻底刷新缓存!我勒个去,每次我调试代码的时候,真心能把人累死(虽然我可以关闭缓存功能,但是我就是要享受一下自己写的清理功能嘛!)。

需求都有了,怎能让技术成为瓶颈?

所以,根据以上需求,很容易得出一个解决方案:当点击前台清理按钮时,php先删除缓存文件,然后reload平滑重启nginx就可以实现彻底清除缓存了!

测试了半天,发现难点是php如何才能执行Linux命令。经过不断测试,终于搞定这个问题,下面开始分享!

二、执行权限

php执行Linux命令有几个前提条件:

①、php必须开放一些执行外部命令的函数,比如exec()、system()等;

②、必须赋予WEB启动帐号(比如www帐号)执行特殊命令(比如 .../nginx -s reload)的权限。

对于问题 ①:

i. 修改php配置文件php.ini,先找到safe_mode配置,确认safe_mode=off,即关闭php安全模式(lnmp一键安装包默认已经是关闭的了);

ii. 继续找到disable_functions配置,将其中的 exec 删除,即允许执行exec()函数;

ii. 最后重载php-fpm或php即可生效,比如lnmp环境可以执行 service php-fpm reload命令。

Ps:开启exec函数存在被恶意注入的风险,不过我这种小博客就没什么好惧怕的,况且我的备份及防护都很完善!

对于问题②:

我们需要在Linux中赋予WEB帐号使用sudo执行指定命令的权限,在这个需求中,我们可以这样做:

Ps:操作vim需要一定的Linux基础知识,不会的童鞋先脑补一下吧!

三、部署代码

①、新增平滑重启nginx的脚本

②、PHP代码

php执行这个脚本的代码很简单:

Ps:实际上,使用 exec(/opt/reload_nginx.sh"") ; 也是完全可以的。多套了一层EscapeShellCmd是为了安全考虑(其实这里貌似没啥必要,算是掩耳盗铃吧!)。

既然知道php代码了,那么只要修改上次分享的缓存清理代码,如下新增26行和33行即可:

Ps:若对以上代码有任何疑问,请务必参考上一篇相关文章

全部完成之后,现在在前台使用缓存清理功能,将会先删除缓存文件,然后平滑重启nginx,从而真正实现在纯静态的前台实时清理缓存,显示最新内容!

四、写在最后

这篇教程算是我这种强迫症&发骚友学习实验之作,而且整个教程并未过多考虑安全问题。所以,如果不是和我这种既不在意被人攻击,又清楚个中原理的人,还是不建议做这种强迫症设置(实际上也就是解禁了exec函数存在隐患而已)!

总之,这篇文章分享的方案,还是有一定的参考价值的,根据本文思路,就可以实现在WEB界面任意操作服务器了,其实也就和大部分站长用的Linux系统面板差不多,希望能给有需要的人提供一些参考,有任何相关问题记得给我留言。

发表评论

gravatar

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

刷新评论

目前评论:7   其中:访客  5   博主  2

  1. 极品飞鸽 5 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

    这个不错,我用的主机宝linux系统,自带平滑启动nginx,不知道效果一不一样

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 电信

      原理一样,目的不一样。

  2. 健康之水 3 来自天朝的朋友 搜狗浏览器 Windows XP 山西省晋中市 联通

    每一次分享技术文章,都是基于自己的痛点,基于自己的需求。。怎么和我的感觉这么像呢?

  3. 外汇站 2 来自天朝的朋友 Netscape Navigator iPhone iPhone OS 8_1 like Mac OS X 河北省石家庄市 电信

    http://m.zhangge.net/4780.html 手机访问这个页面咋打不开呢,是我plus问题,还是缓存页面问题。

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 电信

      服务器缓存问题,已解决。

  4. 成航先森 5 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

    生产环境,想用平滑重启,不知道可行不?

  5. showfuli 0 来自天朝的朋友 谷歌浏览器 Windows 7 广东省东莞市 电信

    签到成功!签到时间:上午9:48:57,每日签到,生活更精彩哦~

加载中,请稍候...