解决Nginx Helper插件一键清理缓存功能导致网站打不开问题 | 张戈博客

  • 时间:
  • 浏览:19
  • 来源:我爱搬资源网 - 专注共享唐朝博客活动

5月份,张戈博客分享了一篇《Nginx开启fastcgi_cache缓存加速,支持html伪静态页面》的文章。文中也提到了 WordPress 有一款名为 Nginx Helper 的插件是三种生活功能的绝佳搭配。

一、疑问描述

不过,最近通过让当其他同学反馈及我当时人亲测发现了另一个 多严重的疑问:

Nginx Helper 设置界面有另一个 多一键清理缓存的按钮【Purge Entire Cache】,怎么让我在后台点击三种生活按钮,前台就跪了。当然,怎么让 对登录用户不显示缓存,那么登录用户访问是正常的。

二、分析意味

分析了一下意味:【Purge Entire Cache】三种生活按钮按下有的是删除 Nginx 所有的缓存,怎么让 却不用重载(启)Nginx。那么疑问来了,当在前台请求时需展示缓存的页面时,Nginx 将继续调用以后的缓存文件,然而所有缓存文件却被三种生活插件删除了,越多越多三种生活页面就1002了!

清理前都时需看得人如图缓存文件夹:

怎么让 清理后,就找不到,怎么让 就是会在生成。怎么让 就是强行删改删除并那么“通知”Nginx …这以后,网站就打不开了。当然,怎么让 是设置了登录用户或已评论用户不展示缓存,那么网站会实时展示正常打开。怎么让 要展示缓存页面就会1002了,怎么让 Nginx 当时人都找只能路径了。。。

三、部署除理

很难理解,要除理三种生活疑问,比如给一键清理功能绑定另一个 多重载 Nginx 的机制。怎么让 一般情形下 php并那么权限去重载或重启 Nginx 。越多越多,要继续使用三种生活一键清理功能,就只能授予 php 重启 Nginx 的权限,还时需将重启 Nginx 的命令集成到插件才行。

①、授权php执行系统命令

php 重启 nginx 功能,张戈博客以后怎么让 分享过相应的最好的办法 了,请先参考部署该功能:

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

②、将重载命令加入到一键清理函数

部署OK以后,编辑 Nginx helper插件下的 purger.php 文件,找到如下函数:

function true_purge_all(){
	$this->unlinkRecursive(RT_WP_NGINX_HELPER_CACHE_PATH, false);
	$this->log( "* * * * *" );
	$this->log( "* Purged Everything!" );
	$this->log( "* * * * *" );
	}

如下在函数中加进去去重载nginx的代码即可:

function true_purge_all(){
	$this->unlinkRecursive(RT_WP_NGINX_HELPER_CACHE_PATH, false);
	exec(EscapeShellCmd("/opt/reload_nginx.sh"));//一键清理后重载nginx
	$this->log( "* * * * *" );
	$this->log( "* Purged Everything!" );
	$this->log( "* * * * *" );
	}

好了,现在点击一键清理功能,缓存会删改删除,怎么让 nginx也会重载,前台网站也就不用跪了。

四、其他完善

当然,总爱其他同学反馈偶尔更新文章,前台无须会刷新。人太好,这本文陈述的情形有的是关系。在使用【删除模式】时,单篇文章的缓存被清理后,就是会重载 Nginx。此时,怎么让 此文的缓存是存放入内存说说,前台肯定就不用刷新了!

越多越多,让当其他同学有必要给单个清理功能也绑定另一个 多重载Nginx的机制。此处为了节省数千个字,张戈决定提供删改修改好的 Nginx Helper 插件,时需的自行下载重新安装三种生活插件即可:

你怎么让 会疑问为毛删除单个页面后,三种生活页面却还能打开?和删除删改有的是一样的机制吗?

分析了下,怎么让 借喻删除删改缓存带来的疑问,删除单个页面应该也会总爱总爱出现该页面打不开的情形才对。不过,细想了一下,解释很简单。怎么让 删除删改缓存会破坏缓存的文件目录形态学 ,而删除单个页面就是删除另一个 多缓存文件,缓存的目录形态学 并未被破坏。

通俗来说:缓存的目录形态学 如同 Nginx 的另一个 多行车路线,只能不破坏三种生活路径,都可否正常行驶。当然了,你破坏了三种生活行车路线,重载一下 Nginx 它又能重新规划了。

五、更多花絮

当我发现三种生活疑问,并除理后,还给这插件的作者发了BUG反馈邮件。蹩脚的中式英语无须影响交流,哈哈!

感兴趣的都时需凑合看看:

Hello Zhang Ge,

Thanks for contacting us. This is Dinesh from rtCamp.

Sorry to hear about the problem you are facing.

Please verify if the Nginx Helper plugin is properly configured from its settings page.

As you are using Nginx FastCGI caching and the site is not loading after purging entire cache so I will suggest to try Redis cache. You can configure Redis cache option in Nginx Helper plugin once its enabled on server.

Redis cache support “Custom Purge URL” option so you can add links which you want to purge instead of purging entire cache. Also, reloading of Nginx is not needed for purging cache.

Please feel free to post your query if you are facing any problem on our community support forum (http://community.rtcamp.com/c/wordpress-nginx).

Regards, Dinesh

Hello , rtcamp:

I found a bug with your plugin that named nginx-helper.

When we click zhe Button [Purge Entire Cache], our websites  will dead immediately.

Because  [Purge Entire Cache] will clean up all of the fastcgi cache,but without reload the nginx .

So nginx can’t find the cache when we request.

To fixed the bug, you could added a action of reload nginx when [Purge Entire Cache] be clicked.

FYI :

exec(EscapeShellCmd(“/opt/reload_nginx.sh”));

But,it must supported by Operating environment.

My post url: https://zhang.ge/10042.html

——————

张戈博客是关注互联网以及分享IT运维工作经验的当时人博客,由系统运维、脚本编程以及资源分享等分类组成,中有 了操作系统教程、运维经验、脚本语言以及网络资源等。

他愿意去让当其他同学的论坛发帖,共同交流疑问。好吧,我能 去看得人下,并简单的陈述了一下疑问和建议,结果并没三种生活生活卵用,怎么让 那么回复【帖子传送门】。。。

最后,写这篇文章时,我还是单独给这哥们又发了一份邮件:

Dear Dinesh ,

Tks for your reply!

I try to post the problem at bbs as your give,but nobody rebply(http://community.rtcamp.com/t/website-will-dead-when-we-click-the-button-purge-entire-cache/10052),so send a email to you again…

Certainly,switch to “redis cache” is a good idea. But I use Nginx Fascgi Caching for a long time, because of it’s simple. furthermore, redis is not installed on my webserver.

Except for the solution I mentioned in my email. The function of “Purge all cache” should be hiddenwhen then plugin used Nginx-Fascgi-caching and set with “Delete local server cache files ” method. Only in this way, the problem will not be triggered by someone who know nothing about this case.

Of course, This problem should be gone when used “Uses the ngx_cache_purge module”….

Regards, Jager

疑问你不除理没关系,但大概应该把三种生活功能隐藏或加进去去警告吧?这也是对插件用户负责的表现,怎么让 越多越多不知情的人其他击一键清理后,前台就歇菜了!多么惊恐,谁还敢用。。。。

好了,怎么让 你也趋于稳定三种生活疑问,都时需参考本文折腾一下。改了半天插件,发现三种生活插件无须繁复,后续有空当时人写几段 PHP 代码就都时需替换掉了。


2016-01-24 最新补充:总爱想明白了一件事,人太好一键清理都时需不总爱总爱出现本文提到的疑问!那就是定义nginx缓存路径是最多使用两级目录,而只能多于两级。

比如,我以后的文章定义的Nginx缓存目录都使用了 /tmp/cache/wpcache,三种生活就是多于两级目录了,Nginx-Heper删除的过有的是直接删除三种生活路径,怎么让 不重载Nginx就不用重新生成目录形态学 ,将意味网站打不开!

简单分析意味,应该是类式于于 mkdir 与否带 -p 参数的结果,怎么让 mkdir 要创建多级目录,顶端目录不趋于稳定时时需加入 -p 都可否成功创建!借喻到Nginx的缓存,它就那么用到 -p 三种生活机制,怎么让 多级目录,顶端目录不趋于稳定,它就傻眼了!

怎么让 是定义成一级或二级目录,比如使用 /tmp/wpcache 就不用总爱总爱出现三种生活疑问,具体意味就不做分析了!让当其他同学怎么让 参考了张戈博客以后写的Nginx缓存配置,请将缓存文件的路径都修改为二级即可,比如 /tmp/wpcache 。