WordPress开启Nginx fastcgi_cache缓存加速方法|Nginx配置实例|转|

tengxunyun cera

简介

本站尚未布置Nginx fastcgi_cache缓存加速,目前使用wp Super Cache进行缓存。

使用WordPress建站的过程中,对于优化Wordpress性能、加快网站访问速度这一环节走了不少的“弯路”。当网站出现访问缓慢、CPU内存耗尽的情形时,最开始想到的是升级服务器配置,后来发现有些无良的VPS商家背后限制资源严重,加钱升级真的很伤人。

最大的体会就是同样的配置,在不同的VPS商家那里跑同一个网站,在同样的流量情况下,居然一个顺畅而另一个卡顿,这个给我最大的感受就是在购买VPS之前一定要看看别人的评测,尤其是VPS主机性能评测这一块,一定要仔细对比,否则容易花不少冤枉钱。

后来给Wordpress做优化时,关注在页面缓存上,之前用过的缓存插件包括但不限于WordPress Super Cache、WP Fastest Cache、W3 Total Cache、cos-html-cache、Cachify……总得来说,安装了缓存插件后提速还是有效果的,但是也带来了不少的问题。

例如配置复杂、生成规则、插件冲突以及无法应对突发流量,也就是说使用缓存插件还是无法达到应对大流量冲击的情况。最后,在朋友的推荐下启用了Nginx fastcgi_cache缓存,直接使用Nginx为页面生成缓存,效率比使用PHP缓存插件要高得多,特别适合小配置的VPS上使用。

安装Nginx ngx_cache_purge模块

  1. 网站:http://labs.frickle.com/files/
  • LNMP

如果你用的是LNMP一键安装包,编辑lnmp安装包目录下的 lnmp.conf 文件,在Nginx_Modules_Options=” 的单引号中加上 –add-module=/root/ngx_cache_purge-2.3 保存,升级一下nginx就安装上了,其他模块也参考这个就行。

ngx_cache_purge-2.3需要你从frickle.com官网中下载安装包并解压,目前最新版是2.3。

 

  • Oneinstack

如果你用的是OneinStack面板,可以通过以下命令来编译ngx_cache_purge模块。

  1. # nginx -V 2>&1 | grep -o ngx_cache_purge 查看ngx_cache_purge是否安装,没有数据表示未安装
  2. cd /root/oneinstack/src
  3. wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
  4. tar xzf ngx_cache_purge2.3.tar.gz
  5. #以下几个安装包都是Oneinstack自带的,不同的版本可能会不同,请根据情况调整
  6. tar xzf nginx1.14.0.tar.gz
  7. tar xzf pcre8.42.tar.gz
  8. tar xzf openssl1.0.2o.tar.gz
  9. cd /root/oneinstack/src/nginx1.14.0
  10. nginx V #查看nginx编译参数,最后加上–add-module=../ngx_cache_purge-2.3
  11. ./configure prefix=/usr/local/nginx user=www group=www withhttp_stub_status_module withhttp_v2_module withhttp_ssl_module withhttp_gzip_static_module withhttp_realip_module withhttp_flv_module withhttp_mp4_module withopenssl=../openssl1.0.2o withpcre=../pcre8.42 withpcrejit withldopt=-ljemalloc addmodule=../ngx_cache_purge2.3
  12. make #编译
  13. mv /usr/local/nginx/sbin/nginx{,_`date +%F`} #备份nginx
  14. cp objs/nginx /usr/local/nginx/sbin
  15. nginx V 2>&1 | grep o ngx_cache_purge
  16. # 显示ngx_cache_purge表示已经安装成功

使用Nginx -V查看编译参数添加add-module时,一定要根据你自己的Nginx的编译参数来操作,也就是说保留原来的Nginx参数再加上add-module。例如挖站否的:

 

 

安装Nginx ngx_cache_purge模块成功。

 

  • 其它面板

如果你用的是其它的面板(专题:服务器控制面板榜单),例如WDCP、BT宝塔面板等,请查阅官网的文档。

Nginx开启fastcgi_cache缓存-配置实例

下面挖站否贴出wzfou.com的Nginx开启fastcgi_cache缓存配置实例,详细的说明如下:

  1. #路径需要提前创建好
  2. fastcgi_cache_path /tmp/nginxcache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=500m;
  3. fastcgi_temp_path /tmp/nginxcache/temp;
  4. fastcgi_cache_key “$scheme$request_method$host$request_uri”;
  5. fastcgi_cache_use_stale error timeout invalid_header http_500;
  6. #忽略一切nocache申明,避免不缓存伪静态等
  7. fastcgi_ignore_headers CacheControl Expires SetCookie;
  8. server {
  9. listen 80;
  10. listen 443 ssl http2;
  11. …………………此部省略……………………
  12. set $skip_cache 0;
  13. #post访问不缓存
  14. if ($request_method = POST) {
  15. set $skip_cache 1;
  16. }
  17. #动态查询不缓存
  18. if ($query_string != “”) {
  19. set $skip_cache 1;
  20. }
  21. #后台等特定页面不缓存(其他需求请自行添加即可)
  22. if ($request_uri ~* “/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|/zhuye/|/wzfou.com/||/question/|/bbs/|/dongtai/|/haoyou/|/qun/|index.php|sitemap(_index)?.xml”) {
  23. set $skip_cache 1;
  24. }
  25. #对登录用户、评论过的用户不展示缓存
  26. if ($http_cookie ~* “comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in”) {
  27. set $skip_cache 1;
  28. }
  29. #这里请参考你网站之前的配置,特别是sock的路径,弄错了就502了!
  30. location ~ [^/]\.php(/|$) {
  31. #fastcgi_pass remote_php_ip:9000;
  32. fastcgi_pass unix:/dev/shm/phpcgi.sock;
  33. fastcgi_index index.php;
  34. include fastcgi.conf;
  35. add_header StrictTransportSecurity “max-age=63072000; includeSubdomains; preload”;
  36. #新增的缓存规则
  37. fastcgi_cache_bypass $skip_cache;
  38. fastcgi_no_cache $skip_cache;
  39. add_header XCache “$upstream_cache_status From $host”;
  40. add_header CacheControl maxage=0;
  41. add_header NginxCache “$upstream_cache_status”;
  42. add_header LastModified $date_gmt;
  43. add_header XFrameOptions SAMEORIGIN; # 只允许本站用 frame 来嵌套
  44. add_header XContentTypeOptions nosniff; # 禁止嗅探文件类型
  45. add_header XXSSProtection “1; mode=block”; # XSS 保护
  46. etag on;
  47. fastcgi_cache WORDPRESS;
  48. fastcgi_cache_valid 200 301 302 1d;
  49. }
  50. #缓存清理配置(可选)
  51. location ~ /purge(/.*) {
  52. allow 127.0.0.1;
  53. #此处填写你的服务器IP
  54. allow 89.208.xxx.xxx;
  55. deny all;
  56. #请注意此处的WORDPRESS要与上面的keys_zone保持一致
  57. fastcgi_cache_purge WORDPRESS “$scheme$request_method$host$1”;
  58. }
  59. …………………此部分省略……………………
  60. }

 

有关说明

本地or内存?在fastcgi_cache_path和fastcgi_temp_path中,有人会建议将它设置为内存路径,例如:/dev/shm/nginx-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;,如果你的磁盘IO很慢的话建议采用此方式,毕竟内存的读写速度非常快。

add_header Cache-Control 

如果是动态内容要实时更新的话,可以设置为0,否则可以设置时间大一些。

 

安装Nginx Helper插件-自动刷新缓存

通过上面的方法我们已经配置好了fastcgi_cache缓存,接下来我们就要解决当Wordpress有新评论、新文章时自动刷新Nginx缓存页面了。直接搜索Nginx Helper插件下载,然后是设置,首先是开启,清除方式选择本地文件。

 

插件还提供了其它的一些设置,例如发表新文章、新评论时是否更新Nginx缓存。

 

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

解决办法是在 WordPress 根目录下的 wp-config.php 中新增如下代码即可:

  1. //根据实际情况定义缓存的存放路径
  2. define( ‘RT_WP_NGINX_HELPER_CACHE_PATH’,‘/tmp/wpcache’);

Nginx fastcgi_cache效果预览

启用了Nginx fastcgi_cache后,我们就可以在浏览器Header 头部信息中看到已经命中了。

 

对于已经设置了不缓存的页面,Nginx fastcgi_cache会直接显示BYPASS。

 

另外,对于已经登录的用户还有发表过评论的用户,Nginx fastcgi_cache也会直接BYPASS。

 

同时,我们服务器的缓存路径中也能看到Nginx fastcgi_cache生成的缓存文件。

 

如果你发现你的评论过的用户依然用的是缓存,那应该是WP没有记住cookie,把以下代码加入到functions.php 中即可。

  1. add_action(‘set_comment_cookies’,‘coffin_set_cookies’,10,3);
  2. function coffin_set_cookies( $comment, $user, $cookies_consent){
  3. $cookies_consent = true;
  4. wp_set_comment_cookies($comment, $user, $cookies_consent);
  5. }

总结

Nginx开启fastcgi_cache缓存对于加快网页响应速度以及节省服务器资源有着非常重要的意义,下图是alibabacloud.com的测试结果,可以看出来启用缓存后服务器的承载能力有了非常大的提升。

 

wzfou.com挖站否在启用fastcgi_cache缓存时,发现在Nginx配置文件中添加了Cache-Control信息,但是总是不生效。HTTP头部信息会总会包含以下信息:

  1. CacheControl: nostore,nocache,mustrevalidate,postcheck=0,precheck=0 Pragma: nocache

经过排查,问题出在了LNMP和Oneinstack一键包中的session.cache_limiter的PHP.ini设置部分, 默认值是nocache,我们需要将它设置为none即可。

 

 

 

cera aliyun tengxunyun cloudiplc

相关推荐

WordPress博客网站使用Memcached和Redis缓存哪个更好|

今天小白得到了一台4核8G的服务器,马上安装上宝塔。接下来就遇到了一个选择困难综合征。到底给数据库安装那种缓存好。是Memcached缓存,还是Redis缓存?接下来小白将详细分析下这两种的区别。 首先,我们今天研究的大前提是#wordpress#博客,那么注定数据量不会太大。访问量也不是超多那种。 一、#Memcached#和#Redis#区别 1、数据存储方式 Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。 Redis有部份存在硬盘上,这样能保证数据的持久性。 2、数据支持类型 Memcache对数据类型支持相对简单。 Redis有复杂的数据类型。 3、使用底层模型差别 它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。 Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。 4、#value#值大小不同 redis最大可以达到1GB,而memcache只有1MB。 二、Memcached和Redis哪个更适合WordPress 根据上面对比我们发现memcached为内存存储,其占用量最大就512MB内存。而Redis可以无限大占用内存和硬盘空间。memcached更适合存储简单的值。所以小白得出的结论是针对内容不多的WordPress博客建议选择用memcached做MySQL数据库的缓存。 但是这里也有一种例外,有些采集站大佬。因为数据量超多。大部分都超过10万篇文章。那种还是用Redis吧。毕竟有这么多内容的服务器配置应该也不低吧。 以上就是今天要介绍的所有内容,如果有错误欢迎留言指出。

宝塔面板Nginx 开启Brotli压缩|提高网站页面加载速度 建站必备 WordPress页面压缩加速

宝塔面板开启方法 1.安装libbrotli cd /www/server git clone https://github.com/bagder/libbrotli cd libbrotli ./autogen.sh ./configure make && make install 2.下载ngx_brotli模块及其依赖: 源码地址,是google开源的一个:https://github.com/google/brotli cd /www/server #下载brotli git clone https://github.com/google/ngx_brotli.git cd ngx_brotli #更新brotli git submodule update —init 3.先查看目前的Nginx版本信息,使用命令: nginx –V 大致输出内容: [[email protected] ~]# nginx –V nginx version: nginx/1.15.10 built by gcc 4.8.5 20150623 (Red Hat 4.8.5–36) (GCC) built with OpenSSL 1.1.1b 26 …

WordPress缓存导致文章阅读数点赞数不更新的解决办法

WordPress缓存导致文章阅读数点赞数不更新这个问题应该很多WordPress站长遇到过,因为WordPress提速最简单的就是缓存,这种方案也收到广大个人站长的一致追捧,然而一缓存网页就成静态了,不会有PHP交互也就不会更新数据,难道缓存和阅读计数不能同时拥有吗?当然有而且还不止一种,天无绝人之路嘛,下面就是一种解决整个页面被缓存而导致文章阅读数点赞数不更新的解决办法。 先声明下,由于原理一样,我这里就用阅读数做例子,点赞数就不讲了。并且这个办法不适用于内存缓存,因为内存缓存失效时还是会执行PHP代码计数的,使用这个方法的话会导致阅读数不够准确。如果是内存缓存用户,建议使用水煮鱼的方案,将阅读数存到内存中,等数量到了指定界限时,一次性写入阅读数,不过这样会出现阅读数无法及时更新的尴尬情况。   解决办法:使用ajax获取文章阅读数量并刷新网页中阅读数量的HTML标签,服务器收到请求后,同时将原来的阅读数量加1并更新到数据库中。说到这里最关键的内容就是ajax提交请求了,既然是请求那就需要接口了,不然不知道请求谁呀,下面是一个简单的请求接口,大家参考下。 PHP接口文件 将下面的代码复制保存为views.php文件,并放在主题目录下的action目录中,没有就新建一个action文件夹。 require( dirname(__FILE__).’/../../../../wp-load.php’ ); nocache_headers(); $post_ID = isset($_POST[‘post_ID’]) ? (int) $_POST[‘post_ID’] : 0; if ($post_ID!=0 ) { $post_views = (int) get_post_meta($post_ID, ‘views’, true); if (!update_post_meta($post_ID, ‘views’, ($post_views + 1))) { add_post_meta($post_ID, ‘views’, 1, true); } $post_views = (int) get_post_meta($post_ID, ‘views’, true); print_r(json_encode(array(‘error’ => 0, ‘views’ => 1, ‘response’ => $post_views))); …

WordPress通过MySQL数据库批量关闭开启文章评论功能

博客在更换主题后就关闭了文章评论模块,但是仍然有人利用接口恶意评论,今天教大家通过修改WordPress数据库批量关闭开启文章评论功能的办法,自从关闭评论功能后,本站已经没有收到任何垃圾评论了。 在WordPress数据库的posts数据表中,评论的开启有一个专门的字段comment_status管理,如果你有很多文章开启了评论,在WordPress后台设置关闭评论是没有作用的,因为WordPress后台关闭评论的功能只适用于关闭开启后发表的文章,并不会对之前的文章执行关闭操作。要想关闭只能挨着点开文章选择关闭,如果文章数量特别大,操作起来不仅费时还浪费精力,上次关闭博客的文章评论时,就有560多篇文章,所以我选择了直接操作WordPress的MySQL数据库来实现关闭功能,下面是操作步骤。 WordPress后台关闭新文章评论 打开WordPress网站后台,选择左侧设置选项,再选择其中的讨论选项,将其中关于文章默认设置的功能全部取消,即不允许评论。如下图   WordPress通过MySQL数据库批量关闭开启文章评论 这样新发布的文章就不会默认开启评论功能,然后我们对旧文章修改设置。 通过MySQL批量修改文章评论状态 在操作数据库前,切记一定要先备份数据库,否则难免发生意外,数据无价,诸位操作一定要注意。 打开数据库,这个打开方式随便你选择,是使用控制台打开还是使用phpmyadmin看大家喜好,这里为了方便我就用phpmyadmin操作了。选择你网站所在数据库中的posts数据表,这张表中存储的是你的所有文章数据,然后选择sql,输入如下代码点击执行: 关闭评论 update wp_posts set comment_status=’close’; 开启评论 update wp_posts set comment_status=’open’; 成功执行后所有已经发布的文章的评论功能都将被批量开启关闭。

微信扫一扫,分享到朋友圈

WordPress开启Nginx fastcgi_cache缓存加速方法|Nginx配置实例|转|