当前位置:首页 > CN2资讯 > 正文内容

WordPress开启Nginx fastcgi,cache缓存加速nginx 缓存

3天前CN2资讯

使用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模块
官方网站:http://labs.frickle.com/files/

wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gztar zxvf ngx_cache_purge-2.3.tar.gz

1.1 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。

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

# nginx -V 2>&1 | grep -o ngx_cache_purge 查看ngx_cache_purge是否安装,没有数据表示未安装cd /root/oneinstack/src wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gztar xzf ngx_cache_purge-2.3.tar.gz#以下几个安装包都是Oneinstack自带的,不同的版本可能会不同,请根据情况调整tar xzf nginx-1.14.0.tar.gz tar xzf pcre-8.42.tar.gz tar xzf openssl-1.0.2o.tar.gz cd /root/oneinstack/src/nginx-1.14.0nginx -V #查看nginx编译参数,最后加上--add-module=../ngx_cache_purge-2.3./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-openssl=../openssl-1.0.2o --with-pcre=../pcre-8.42 --with-pcre-jit --with-ld-opt=-ljemalloc --add-module=../ngx_cache_purge-2.3make  #编译mv /usr/local/nginx/sbin/nginx{,_`date +%F`}  #备份nginxcp objs/nginx /usr/local/nginx/sbin nginx -V 2>&1 | grep -o ngx_cache_purge# 显示ngx_cache_purge表示已经安装成功

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

安装Nginx ngx_cache_purge模块成功。

1.3 其它面板
如果你用的是其它的面板、BT宝塔面板。
—————————————————————————————————————————————
BT宝塔面板:

当然也可以用 Nginx -V 来查看的所有编译模块里面有没有这个模块。宝塔面板是已经编译好了。

Nginx开启fastcgi_cache缓存-配置实例
既然编译好了模块,要用这个缓存功能,我们就需要配置www.httple.conf这个文件,很好找

安装好模块之后,配置nginx

在server模块下面添加如下代码,请按着自己实际情况自行修改。
我将如下几行代码,放置在我的nginx.conf文件里面,因为,我有好几个网站在一个服务器上。

#路径需要提前创建好fastcgi_cache_path /tmp/nginx-cache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=500m;fastcgi_temp_path /tmp/nginx-cache/temp;fastcgi_cache_key "$scheme$request_method$host$request_uri";fastcgi_cache_use_stale error timeout invalid_header http_500;#忽略一切nocache申明,避免不缓存伪静态等fastcgi_ignore_headers Cache-Control Expires Set-Cookie;server {    listen 80;    listen 443 ssl http2;   …………………此部省略……………………       set $skip_cache 0;    #post访问不缓存    if ($request_method = POST) {             set $skip_cache 1;         }       #动态查询不缓存    if ($query_string != "") {             set $skip_cache 1;         }       #后台等特定页面不缓存(其他需求请自行添加即可)    if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|/zhuye/|/httple.net/||/question/|/bbs/|/dongtai/|/haoyou/|/qun/|index.php|sitemap(_index)?.xml") {             set $skip_cache 1;         }     #对登录用户、评论过的用户不展示缓存    if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {             set $skip_cache 1;         }    #这里请参考你网站之前的配置,特别是sock的路径,弄错了就502了!    location ~ [^/]\.php(/|$) {     #fastcgi_pass remote_php_ip:9000;     fastcgi_pass unix:/dev/shm/php-cgi.sock;     fastcgi_index index.php;     include fastcgi.conf;     add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";     #新增的缓存规则     fastcgi_cache_bypass $skip_cache;     fastcgi_no_cache $skip_cache;     add_header X-Cache "$upstream_cache_status From $host";     add_header Cache-Control  max-age=0;     add_header Nginx-Cache "$upstream_cache_status";     add_header Last-Modified $date_gmt;     add_header X-Frame-Options SAMEORIGIN; # 只允许本站用 frame 来嵌套     add_header X-Content-Type-Options nosniff; # 禁止嗅探文件类型     add_header X-XSS-Protection "1; mode=block"; # XSS 保护     etag  on;     fastcgi_cache WORDPRESS;     fastcgi_cache_valid 200 301 302 1d;   }      #缓存清理配置(可选)   location ~ /purge( /.*) { #为防止转义,请去掉{ /之间的空格     allow 127.0.0.1;     #此处填写你的服务器IP     allow 89.208.xxx.xxx;     deny all;     #请注意此处的WORDPRESS要与上面的keys_zone保持一致     fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";     }   …………………此部分省略…………………… }

—————————————————————————————————————————————

二、Nginx开启fastcgi_cache缓存-配置实例

2.1 配置实例
下面我直接贴出httple.net的Nginx开启fastcgi_cache缓存配置实例,详细的说明如下:

#路径需要提前创建好fastcgi_cache_path /tmp/nginx-cache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=500m;fastcgi_temp_path /tmp/nginx-cache/temp;fastcgi_cache_key "$scheme$request_method$host$request_uri";fastcgi_cache_use_stale error timeout invalid_header http_500;#忽略一切nocache申明,避免不缓存伪静态等fastcgi_ignore_headers Cache-Control Expires Set-Cookie;server {    listen 80;    listen 443 ssl http2;   …………………此部省略……………………       set $skip_cache 0;    #post访问不缓存    if ($request_method = POST) {             set $skip_cache 1;         }       #动态查询不缓存    if ($query_string != "") {             set $skip_cache 1;         }       #后台等特定页面不缓存(其他需求请自行添加即可)    if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|/zhuye/|/httple.net/||/question/|/bbs/|/dongtai/|/haoyou/|/qun/|index.php|sitemap(_index)?.xml") {             set $skip_cache 1;         }     #对登录用户、评论过的用户不展示缓存    if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {             set $skip_cache 1;         }    #这里请参考你网站之前的配置,特别是sock的路径,弄错了就502了!    location ~ [^/]\.php(/|$) {     #fastcgi_pass remote_php_ip:9000;     fastcgi_pass unix:/dev/shm/php-cgi.sock;     fastcgi_index index.php;     include fastcgi.conf;     add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";     #新增的缓存规则     fastcgi_cache_bypass $skip_cache;     fastcgi_no_cache $skip_cache;     add_header X-Cache "$upstream_cache_status From $host";     add_header Cache-Control  max-age=0;     add_header Nginx-Cache "$upstream_cache_status";     add_header Last-Modified $date_gmt;     add_header X-Frame-Options SAMEORIGIN; # 只允许本站用 frame 来嵌套     add_header X-Content-Type-Options nosniff; # 禁止嗅探文件类型     add_header X-XSS-Protection "1; mode=block"; # XSS 保护     etag  on;     fastcgi_cache WORDPRESS;     fastcgi_cache_valid 200 301 302 1d;   }      #缓存清理配置(可选)   location ~ /purge( /.*) { #为防止转义,请去掉{ /之间的空格     allow 127.0.0.1;     #此处填写你的服务器IP     allow 89.208.xxx.xxx;     deny all;     #请注意此处的WORDPRESS要与上面的keys_zone保持一致     fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";     }   …………………此部分省略…………………… }

2.2 有关说明
本地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 Helper

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


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

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

解决办法:

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

//根据实际情况定义缓存的存放路径define( 'RT_WP_NGINX_HELPER_CACHE_PATH','/tmp/wpcache');

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

如果你发现上述定义路径的代码不生效,你可以采用以下建议:

一是修改插件,将插件中路径改成你自己的,二是使用软连接,/var/run/nginxcache 和/tmp/wpcache

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

add_action('set_comment_cookies','coffin_set_cookies',10,3);function coffin_set_cookies( $comment, $user, $cookies_consent){    $cookies_consent = true;    wp_set_comment_cookies($comment, $user, $cookies_consent);}

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

Cache-Control: no-store,no-cache,must-revalidate,post-check=0,pre-check=0 和 Pragma: no-cache,

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

Nginx开启fastcgi_cache缓存对于加快网页响应速度以及节省服务器资源有着非常重要的意义,启用缓存后服务器的承载能力有了非常大的提升。

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/19372.html

    分享给朋友:

    “WordPress开启Nginx fastcgi,cache缓存加速nginx 缓存” 的相关文章

    GIA VPS服务器:高速稳定的理想选择及价格性能分析

    GIA VPS服务器概述 在选择服务器时,GIA VPS服务器越来越受到关注。我之前在寻找合适的VPS时,了解到GIA VPS是一个非常不错的选择。它采用了CN2 GIA线路,提供了高效、稳定的网络连接。对我来说,网络的速度和稳定性是使用服务器的关键因素,而GIA VPS服务器在这两个方面表现都很优...

    轻云互联:助力企业数字化转型的云计算解决方案

    轻云互联是隶属于广州轻云网络科技有限公司的云计算服务提供商。自成立以来,轻云互联专注于云计算领域,提供一系列全方位的一体化解决方案。这些解决方案涵盖了云计算产品、租用托管服务、云服务器、裸金属服务器、云虚拟主机以及游戏云服务等。走进轻云互联,你会发现这里不仅是一个技术创新的平台,更是一个通过边缘计算...

    阿里云国际站:轻松注册与支付方式全解析

    什么是阿里云国际站? 在这个科技迅速发展的时代,云计算已经成为许多企业和个人开展业务的重要基础设施。阿里云国际站便是一处全球化的云计算服务平台,旨在为世界各地的用户提供高效、灵活和安全的云计算服务。它不仅支持多种功能,还具备强大的全球基础设施,能够满足不同用户的需求。 阿里云国际站被设定为一个面向全...

    Hostwinds LLC:卓越的网络托管服务与高性价比优势

    Hostwinds LLC成立于2010年,位于美国西雅图。这家公司一直专注于提供多种网络托管服务,包括虚拟主机、虚拟专用服务器(VPS)和独立服务器。在这个竞争激烈的市场中,Hostwinds凭借其独特的优势和不断升级的服务赢得了客户的信赖。我个人认为,Hostwinds的历史反映了它对客户需求的...

    如何使用DigitalOcean优惠码获取200美元免费额度

    DigitalOcean是一家备受赞誉的云计算服务提供商,专门致力于为开发者和初创公司提供一流的云基础设施解决方案。通过其简单易用的界面和高效的性能,DigitalOcean帮助用户轻松地部署和扩展应用程序。我在使用DigitalOcean时,深刻感受到了它为开发者量身定制的便捷性,毫无疑问,这使得...

    AS4837线路概述与技术特点解析,适合预算有限用户的高速网络选择

    AS4837线路的概述 当我开始了解AS4837线路时,就会发现它不仅仅是一个技术名词,更是中国联通的一部分。AS4837,简称为China169,是中国联通的骨干网线路,诞生于20世纪90年代。这条线路架起了中国大陆与全球之间的桥梁,特别是连接了香港、美国、日本和韩国等重要地区。对于那些追求高速互...