BT(宝塔面板)-WordPress开启Nginx fastcgi_cache缓存加速

2018年12月14日16:15:01 80 17,854

利用宝塔面板和wordpress来搭建网站还是很容易的,但是搭建网站容易,想要访问快却不容易。有些小伙伴总是问,宝塔面板打开很快,但是我的网站访问却很慢。宝塔面板访问快,肯定是利用了缓存来加速,你的网站访问慢,额,配置,带宽,都是慢的原因,但是最重要的可能是没有配置缓存。

大鸟以前讲过很多配置缓存的文章,基本都是基于宝塔面板和wordpress来说的,当然如果利用宝塔面板来安装wordpress,最快捷的方式就就是安装WP-Super-Cache,或者用 WP-Rocket 但是 WP-Rocket是收费的,前者是免费的,但是大鸟觉得WP-Super-Cache更安心点。其他的还有很多插件比如;WP Fastest Cache、W3 Total Cache、cos-html-cache、Cachify……总得来说,安装了缓存插件后提速还是有效果的,但是也带来了不少的问题。例如配置复杂、生成规则、插件冲突以及无法应对突发流量,也就是说使用缓存插件还是无法达到应对大流量冲击的情况。

如果要高级点的缓存,我们可以用 memcached+batcache 这个方式来加速网站,效果还是很不错的,而且简单快捷高效,应对突发的大流量也是不错的。

大鸟以前写过的关于加速wordpress的文章

bt(宝塔)面板安装wordpress、启用memcached、Batcache让你的博客飞起来

Bt(宝塔面板)安装wordpress并开启Redis加速

但是今天大鸟要说是利用Nginx fastcgi_cache缓存,直接使用Nginx为页面生成缓存来加速wordpress,而且还支持html伪静态页面,效率比使用PHP缓存插件要高得多,也比较适合小配置的VPS上使用。

一、安装Nginx ngx_cache_purge模块

大鸟是基于宝塔面板来讲的这个教程,宝塔面板很贴心的给我们编译好了这个模块,如果你不放心,可以用命令来查看一下。

# nginx -V 2>&1 | grep -o ngx_cache_purge 查看ngx_cache_purge是否安装,没有数据表示未安装

我们输入命令之后,结果如图:BT(宝塔面板)-WordPress开启Nginx fastcgi_cache缓存加速

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

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

既然编译好了模块,要用这个缓存功能,我们就需要配置www.daniao.org.conf这个文件,很好找。BT(宝塔面板)-WordPress开启Nginx fastcgi_cache缓存加速

2.1配置实例

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

#下面各个参数的含义请自行百度!
#下面2行的中的wpcache路径请自行提前创建,否则可能会路径不存在而无法启动nginx,max_size请根据分区大小自行设置
fastcgi_cache_path /tmp/wpcache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=1G;
fastcgi_temp_path /tmp/wpcache/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;
#Ps:如果是多个站点,以上内容不要重复添加,否则会冲突,可以考虑将以上内容添加到nginx.conf里面,避免加了多次。

server
{
    listen 80;
    listen 443 ssl http2;
    server_name www.daniao.org;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/www.daniao.org;
    
     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/|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(/|$)
            {
                try_files $uri =404;
                fastcgi_pass unix:/tmp/php-cgi-72.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";
                fastcgi_cache WORDPRESS;
                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_valid 200 301 302 1d;
        }

        #缓存清理配置(可选模块,请细看下文说明)
        location ~ /purge(/.*) {
            allow 127.0.0.1;
            allow "此处填写你的服务器IP";
            deny all;
            fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
        }
      …………………此部分省略……………………	

}

关于sock,宝塔面板的在/www/server/php/72/etc/php-fpm.conf中有配置路径宝塔面板的sock,如果不清楚,可以自己打开看下,然后复制到需要修改的地方就可以了。

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缓存之后,我们需要安装插件, fastcgi_cache 有一个量身定做的 WordPress 缓存清理插件:Nginx Helper。这个插件不定时更新,而且更新的很频繁。安装这个插件 ,非常简单,直接进入 WordPress 后台插件安装界面搜索 Nginx Helper 关键词在线安装即可。

安装后,从后台【工具】==>【Nginx Helper】打开插件设置界面如下所示:BT(宝塔面板)-WordPress开启Nginx fastcgi_cache缓存加速

首先是开启purge,然后我们选择nginx Fastcgin cahe,因为就我们用就是这个缓存。之后选择 Delete local server cache files。当然第一个也可以用,但是一般推荐用Delete local server cache files因为每个服务器的环境都不一样,缓存路径也会不尽相同就会导致插件无法找到缓存文件并删除!

插件还提供了其它的一些设置,功能非常丰富,例如发表新文章、新评论时是否更新Nginx缓存等。BT(宝塔面板)-WordPress开启Nginx fastcgi_cache缓存加速

额,一般默认的就可以的选项就可以了,图上是大鸟的配置,大家可以看下,如果看不懂可以用谷歌浏览器翻译下。额,实在不会可以对比看下面的图:BT(宝塔面板)-WordPress开启Nginx fastcgi_cache缓存加速

3.1清理模式选择

清理模式还需要仔细说下。

①、purge 模式

这个模式需要保留上文 Nginx 配置中的 purge 清理路径,清理的时候会产生一个请求。

出于安全考虑,一般 purge 都不会完全开放!只有特定的 IP 可以访问,所以,如果用了 CDN 的朋友,再使用模式一,则需要在服务器上的 /etc/hosts 中将网站域名解析为服务器真实 IP,以便插件直接请求 purge 路径,而不用走 CDN 节点,避免请求被拒绝。还是没搞懂的话就放弃这个模式吧!

②、文件模式

模式二是直接清理对应的缓存文件,不需要请求 purge 这个清理路径,所以使用模式二,不需要配置上文 Nginx 的 purge 规则(我个人推荐使用这个模式)。

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

3.2解决办法:

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

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

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

如果全部设置好,改保存的保存,改重启的重启,等等!

四、Nginx fastcgi_cache效果预览

启用了Nginx fastcgi_cache后,我们就可以在浏览器Header 头部信息中看到已经命中了。BT(宝塔面板)-WordPress开启Nginx fastcgi_cache缓存加速

对于已经设置了不缓存的页面,Nginx fastcgi_cache会直接显示BYPASS,我们如果是登录状态那是不显示缓存的,如图:BT(宝塔面板)-WordPress开启Nginx fastcgi_cache缓存加速

同时,我们服务器的缓存路径中也能看到Nginx fastcgi_cache生成的缓存文件。BT(宝塔面板)-WordPress开启Nginx fastcgi_cache缓存加速

如果你发现你的评论过的用户依然用的是缓存,那应该是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);
}

五、总结

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

5.1 细节调整

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

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

经过排查,问题出在了宝塔面板中的session.cache_limiter的PHP.ini设置部分, 默认值是nocache,我们需要将它设置为none即可。

BT(宝塔面板)-WordPress开启Nginx fastcgi_cache缓存加速

5.2 X-Powered-By

我们用宝塔面板会默认的出现X-Powered-By 7.2.12 出现php的版本信息,从安全角度来说还是很不友好的。X-Powered-By是网站响应头信息其中的一个,出于安全的考虑,一般会修改或删除掉这个信息。

宝塔面板里我们如何修改呢:PHP.ini设置expose_php = offBT(宝塔面板)-WordPress开启Nginx fastcgi_cache缓存加速

设置好之后,我们重载php服务。

利用宝塔面板给WordPress开启Nginx fastcgi_cache缓存加速方法就说完了,如果有什么疑问可以留言,说实话利用宝塔面板来搞这个Nginx fastcgi_cache缓存加速还是非常方便的。喜欢折腾的小伙伴赶紧试试。

其实,Nginx Helper还支持redis cache模式的缓存,也是非常不错的!

Nginx Helper真的是非常强大,关键是这么强大的插件还是免费的。

最后:友情提示,如果我们勾选Enable Nginx Timestamp in HTML 你在查看网页源代码的时候会发现一些信息如图:BT(宝塔面板)-WordPress开启Nginx fastcgi_cache缓存加速

如果你不需要这些信息,可以选择关闭。

内容参考 linuxeye.cnjybb.mezhangge.net和 alibabacloud.com

  • 我的微信
  • 分享宝塔面板建站技术交流等!
  • weinxin
  • 博客公众号
  • 关注本博公众号
  • weinxin

发表评论

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

目前评论:80   其中:访客  64   博主  16

    • avatar 如丶果 2

      老哥,其他都没问题正常就是ningx经常报大量的错。unlink /tmp/wpcahe/************* failed.
      我这边除了有个没有多个站点却把以下配置放到了nginx配置上,其他应该都是按文章说的操作来的。

      “fastcgi_cache_path /tmp/wpcache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=1G;
      fastcgi_temp_path /tmp/wpcache/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;”

        • avatar 大鸟 Admin

          @如丶果 nginx -t检查配置文件是否正确,加我微信吧,网站最下面能看到。

            • avatar 如丶果 2

              @大鸟 nginx: the configuration file /www/server/nginx/conf/nginx.conf syntax is ok
              nginx: configuration file /www/server/nginx/conf/nginx.conf test is successful
              好像没问题~

          • avatar 青藤联盟 0

            一直觉得能用vps的人都是大神了

              • avatar 大鸟 Admin

                @青藤联盟 一直在大鸟博客逛,你也会变成大神的 :lol:

              • avatar 如丶果 2

                大佬,这个和Nginx+Redis Cache缓存提速网站这个共存吗?我现在用上了fastcgi,我看配置文件部分设置项是冲突的好像

                  • avatar 大鸟 Admin

                    @如丶果 Redis缓存主要为了动态加速,有利于减少数据库查询次数,对于Wordpress有一定的加速作用。Redis Object Cache就是这样一个插件,前提是你需要在你的VPS主机上启用Redis。
                    https://wordpress.org/plugins/redis-cache/

                  • avatar 大牙鱼 1

                    从昨天弄到现在,按照鸟哥的查看方法应该是弄好了,今早弄到数据盘存放缓存成功后,再把位置移到内存里面,非常感谢鸟哥的帮助,虽然后面鸟哥都不耐烦,都不想鸟我了。现在的问题是这么控制内存里面的缓存,比如不缓存网站首页该这么设置?还有没有必要搭配wp-rocket一起使用?

                    • avatar 自然 2

                      //根据实际情况定义缓存的存放路径
                      define( ‘RT_WP_NGINX_HELPER_CACHE_PATH’,’/tmp/wpcache’);
                      大鸟兄,我不确定这一行是不是未生效
                      我观察nginx helper 日志文件中显示的还是作者定义的/var/run/nginx-cache/

                        • avatar 大鸟 Admin

                          @自然 缓存生效了没有,有hit了没有?

                            • avatar 自然 2

                              @大鸟 已经生效了,我发现这一行定义无效,不清楚什么问题造成的
                              我直接尝试修改插件,可以完成缓存清理
                              感谢你的文章参考

                                • avatar 大鸟 Admin

                                  @自然 作者的文档看了没有啊,因为我也好久没折腾这玩意了。我还不知道这个到底生效与否,反正目前使用和清除还是没有问题的。

                                    • avatar 自然 2

                                      @大鸟 看了,已经解决

                                        • avatar 大鸟 Admin

                                          @自然 可以的,如果可以,不妨把发现的问题分享于此,帮助下后来的人。 :neutral:

                                            • avatar 自然 2

                                              @大鸟 这个问题我无法给出准确的答案,但是我可以提供两种思路,一是修改插件中的/var/run/nginx-cache为实际地址,二是ls对目录进行软链接

                                                • avatar 大鸟 Admin

                                                  @自然 足够了,这个回答已经足够解决很多人的烦恼了,我空了也会写一篇关于这个的文章,你这么一说看来确实是有问题的。非常感谢啊,欢迎常来! :razz:

                                                    • avatar 自然 2

                                                      @大鸟 不客气,互相学习

                                      • avatar 水哥 2

                                        /tmp/wpcache 文件里和博主一样有很多文件夹,里面是空的,正常吗?

                                          • avatar 大鸟 Admin

                                            @水哥 缓存,生效了没?

                                            • avatar 水哥 2

                                              @水哥 部分文档有内容,很少,另外没有A解析我测试下,,按照你的方法,是生效的

                                            • avatar 三石 5

                                              国内的服务器上有多个网站,所以准备修改主nginx.conf文件。但是报错。
                                              换了个思路,为每个网站设置不同的nginx缓存目录。
                                              比如网站aaa.com。对应的缓存目录设置为:/tmp/aaa_cache, 临时缓存目录为:/tmp/aaa_cache/temp
                                              内存缓存区(看到博客留言这么叫)key_zone为aaa.com。
                                              有2处需要根据key_zone的命名来调整:
                                              1.新增缓存规则里面
                                              fastcgi_cache aaa.com;
                                              2.缓存清理配置
                                              fastcgi_cache_purge aaa.com “$scheme$request_method$host$1”;

                                                • avatar 大鸟 Admin

                                                  @三石 是解决了,还是没解决?

                                                    • avatar 三石 5

                                                      @大鸟 按照我的思路解决了。
                                                      但是修改主nginx.conf配置文件的方式没有解决。
                                                      够了 :mrgreen:

                                                        • avatar 大鸟 Admin

                                                          @三石 修改主nginx只能用一种缓存方式了,所以会报错,还是分开搞吧,好嗨哟,人生已经达到了高潮!

                                                            • avatar 三石 5

                                                              @大鸟 在大鸟兄的指导下,我得意地笑,我得意地笑!

                                                      • avatar sansway 5

                                                        昨天折腾了一天,就像大鸟说的稀里糊涂的我就折腾好了,后来又出问题,索性把网站都删掉重新设置Nginx fastcgi_cache。后来出现404错误,伪静态的问题,最后在大鸟大神的指导下解决了。速度果然杠杠滴!
                                                        折腾好后,我又重新看了几遍遍文章,理清了思路。思路清晰后其实操作并不麻烦!但是一定要细心。

                                                          • avatar 大鸟 Admin

                                                            @sansway 非常好的留言,最重要的是细心,所有的折腾不成功都是不细心,指本文!

                                                              • avatar 三石 5

                                                                @大鸟 vultr家的VPS,硅谷节点,用了Nginx缓存,已经可以飞起来了。看到留言说可以和memcached内存缓存一起用,也用上了 :mrgreen: 。继续折腾。

                                                                  • avatar 大鸟 Admin

                                                                    @三石 刹不住了,你已经hi起来了! :lol:

                                                                      • avatar 三石 5

                                                                        @大鸟 :grin: 必须滴,在大鸟兄的技术支持下,折腾起来!

                                                                • avatar 大鸟 Admin

                                                                  keys_zone是这个缓存空间的名字,cache是用多少内存(主要缓存key和文件元信息,不会缓存页面),inactive表示默认失效时间,max_size表示最多用多少硬盘空间,需要注意的是fastcgi_cache缓存是先写在fastcgi_temp_path再移到fastcgi_cache_path,所以这两个目录最好在同一个分区。

                                                                  • avatar 缙哥哥 6

                                                                    fastcgi_cache_path /tmp/wpcache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=1G;
                                                                    这个相关参数能详细解释一下吗?

                                                                      • avatar 大鸟 Admin

                                                                        @缙哥哥 levels=1:2,表示创建两层目录缓存/tmp/wpcache最多创建3层。
                                                                        keys_zone=WORDPRESS:250m 缓存区起名为wordpress 指定大小为250m
                                                                        inactive=1d 代表如果缓存文件一天内没有被访问,则删除;
                                                                        max_size=1G 代表硬盘缓存最大为1G;

                                                                        参考文章
                                                                        http://www.nginxtips.com/configure-nginx-fastcgi-cache/
                                                                        http://www.haidx.com/fastcgi-cache-details.html
                                                                        http://www.just4coding.com/blog/2014/11/01/nginx-purge-directory/
                                                                        http://weizhifeng.net/nginx-proxy-cache.html
                                                                        https://www.nginx.com/blog/nginx-caching-guide/#gs.6PdbraI
                                                                        http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_cache
                                                                        https://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/
                                                                        https://rtcamp.com/wordpress-nginx/tutorials/single-site/fastcgi-cache-with-purging/
                                                                        http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_cache

                                                                          • avatar 缙哥哥 6

                                                                            @大鸟 如果多个站点,是否就是将keys_zone=命名不同?
                                                                            inactive单位可否使用h(小时)?
                                                                            max_size可否使用M为单位(还是想弄内存盘,但是不大,想弄512M)

                                                                              • avatar 大鸟 Admin

                                                                                @缙哥哥 fastcgi_cache_path /tmp/daniao_cache levels=1:2 keys_zone=daniao.org:384m inactive=1d max_size=5G;
                                                                                #站点2缓存配置
                                                                                #如果要开启更多站点缓存,请继续增加,注意每个站点的 缓存路径 和 keys_zone 要自定义区分一下
                                                                                #Ps:代码中的参数都只是范例,实际使用请根据服务器配置自行修改,内存从可以写为M
                                                                                fastcgi_cache_path /tmp/daniaocom_cache levels=1:2 keys_zone=daniao.com:384m inactive=1d max_size=5G;
                                                                                #其他配置可以不变
                                                                                fastcgi_temp_path /tmp/temp_cache;
                                                                                fastcgi_cache_key “$scheme$request_method$host$request_uri”;
                                                                                #比如配置到内存中:
                                                                                fastcgi_cache_path /dev/shm/nginx-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
                                                                                fastcgi_cache_path设置tmpfs内存中,操作系统不同tmpfs路径也不同,如下:
                                                                                CentOS:/dev/shm
                                                                                Ubuntu和Debian:/run/shm

                                                                                  • avatar 缙哥哥 6

                                                                                    @大鸟 为什么上面有缓存区大小,后面又有硬盘缓存最大空间?两者有什么区别吗?还有,硬盘缓存最大空间单位可以是M吗?
                                                                                    比如:keys_zone=daniao.com:256m inactive=12h max_size=512M;

                                                                                      • avatar 大鸟 Admin

                                                                                        @缙哥哥 看我新贴的回复在最上面。你说这个应该也可以,你可以试试。keys_zone=WORDPRESS:100m 这个就是内存缓存设置100M作为缓存。

                                                                              • avatar 缙哥哥 6

                                                                                对了,可以跟内存缓存memcached搭配使用吗?

                                                                                  • avatar 大鸟 6

                                                                                    @缙哥哥 可以啊,完全可以配合,没有问题!

                                                                                  • avatar 小白 1

                                                                                    大鸟哥好,装了这个缓存之后,有一个问题困扰很久了,就是浏览器首次打开网站,会有很多图片没有加载出来,刷新一下就好了,有办法解决吗?

                                                                                      • avatar 大鸟 6

                                                                                        @小白 额,还这么回事,你加我qq,我空了给你看看,额,感觉是不是你服务器带宽问题?或者你是不是在主题里面开启了图片延迟加载

                                                                                          • avatar 小白 1

                                                                                            @大鸟 加不了你的QQ,要验证,方便加我下吗?我是778182903

                                                                                              • avatar 大鸟 6

                                                                                                @小白 我修改过了,你现在可以加我了。

                                                                                          • avatar 缙哥哥 6

                                                                                            卧槽,内存盘弄起来,再加上这个就太棒了!

                                                                                              • avatar 大鸟 6

                                                                                                @缙哥哥 我擦,你自己的博客也很棒。加上这个确实不错。

                                                                                                  • avatar 缙哥哥 6

                                                                                                    @大鸟 谢谢大神光顾,蓬荜生辉!不过貌似你的站回复没有邮件通知!

                                                                                                  • avatar 大鸟 6

                                                                                                    @缙哥哥 一开始取消了,感觉用国内的邮件回复有点慢,不过我现在加上去了,用163的提交留言确实有点慢,我用的国外服务器。

                                                                                                      • avatar 缙哥哥 6

                                                                                                        @大鸟 我一开始用163的免费企业邮,然后现在用阿里云的每天200封免费的。

                                                                                                    • avatar 你好 0

                                                                                                      你好 大神 我用的宝塔面板 也把session.cache_limiter 改成none 了
                                                                                                      但是还是 nocache

                                                                                                        • avatar 大鸟 6

                                                                                                          @你好 退出登录状态才会生效!

                                                                                                        • avatar 沃茨博客 1

                                                                                                          学习到了,本来以为memcached已经够快的了,改天也试一试感觉咋样 :mrgreen:

                                                                                                            • avatar 大鸟 6

                                                                                                              @沃茨博客 速度相当可以,值得一试!

                                                                                                            • avatar 鸟叔 0

                                                                                                              鸟叔认为虽然这样搞了,但是对于1G内存的vps,效果真心不明显,还不如不搞这么复杂

                                                                                                                • avatar 大鸟 6

                                                                                                                  @鸟叔 提升效果还是很明显的,只是折腾的门槛有点高,如果实在不会,就玩玩普通的缓存就可以了。 :oops:

                                                                                                                • avatar 大鸟 6

                                                                                                                  @大致 缓存文件目录有读写权限吗?设置为777.你的配置文件我没看出什么问题,网站路径要是根目录。这个缓存是支持伪静态的。仔细检查配置文件吧。

                                                                                                                  • avatar 大鸟 6

                                                                                                                    强调一点的是这个nginx缓存,折腾起来还是有难度的,如果动手能力不强的人,就不要去搞了。WP-Super-Cache这些缓存完全可以满足你的需求。 :oops: :oops:

                                                                                                                    • avatar 大致 1

                                                                                                                      大鸟兄好。我把配置文件里的1G改成了4G,把max-age=0 改成了3600,剩下的都是参照你的配置来的。
                                                                                                                      php.ini和wp-config.php也都改了。
                                                                                                                      但是tmp下并没有生成cache文件,查看header里好像只多了一行cache-control: max-age=0
                                                                                                                      并没有出现nginx-cache和x-cache。
                                                                                                                      难道是跟我的伪静态或者其它设置有冲突吗?望不吝赐教。

                                                                                                                        • avatar 大鸟 6

                                                                                                                          @大致 你是什么环境,你的nginx缓存没生效。

                                                                                                                            • avatar 大致 1

                                                                                                                              @大鸟 CentOS7+BBR
                                                                                                                              宝塔面板免费版 6.8.6
                                                                                                                              php-7.1
                                                                                                                              wordpress 5.0.2
                                                                                                                              Nginx1.15.6
                                                                                                                              ====伪静态====
                                                                                                                              location / {
                                                                                                                              index index.html index.php;
                                                                                                                              if (-f $request_filename/index.html){
                                                                                                                              rewrite (.*) $1/index.html break;
                                                                                                                              }
                                                                                                                              if (-f $request_filename/index.php){
                                                                                                                              rewrite (.*) $1/index.php;
                                                                                                                              }
                                                                                                                              if (!-f $request_filename){
                                                                                                                              rewrite (.*) /index.php;
                                                                                                                              }
                                                                                                                              }

                                                                                                                              rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml$ “/index.php?xml_sitemap=params=$2” last;
                                                                                                                              rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml\.gz$ “/index.php?xml_sitemap=params=$2;zip=true” last;
                                                                                                                              rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html$ “/index.php?xml_sitemap=params=$2;html=true” last;
                                                                                                                              rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html.gz$ “/index.php?xml_sitemap=params=$2;html=true;zip=true” last;
                                                                                                                              rewrite /wp-admin$ $scheme://$host$uri/ permanent;
                                                                                                                              ====配置文件====
                                                                                                                              fastcgi_cache_path /tmp/wpcache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=1G;
                                                                                                                              fastcgi_temp_path /tmp/wpcache/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;
                                                                                                                              server_name pewae.com;
                                                                                                                              index index.php ;
                                                                                                                              root /www/advanced/pewae_com;

                                                                                                                              #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
                                                                                                                              #error_page 404/404.html;
                                                                                                                              limit_conn perserver 300;
                                                                                                                              limit_conn perip 50;
                                                                                                                              limit_rate 512k;
                                                                                                                              #HTTP_TO_HTTPS_START
                                                                                                                              if ($server_port !~ 443){
                                                                                                                              rewrite ^(/.*)$ https://$host$1 permanent;
                                                                                                                              }
                                                                                                                              #HTTP_TO_HTTPS_END
                                                                                                                              ssl_certificate /etc/letsencrypt/live/pewae.com/fullchain.pem;
                                                                                                                              ssl_certificate_key /etc/letsencrypt/live/pewae.com/privkey.pem;
                                                                                                                              ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
                                                                                                                              ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
                                                                                                                              ssl_prefer_server_ciphers on;
                                                                                                                              ssl_session_cache shared:SSL:10m;
                                                                                                                              ssl_session_timeout 10m;
                                                                                                                              error_page 497 https://$host$request_uri;

                                                                                                                              #SSL-END

                                                                                                                              #ERROR-PAGE-START 错误页配置,可以注释、删除或修改
                                                                                                                              error_page 404 /404.html;
                                                                                                                              error_page 502 /502.html;
                                                                                                                              #ERROR-PAGE-END

                                                                                                                              #PHP-INFO-START PHP引用配置,可以注释或修改
                                                                                                                              #SECURITY-START 防盗链配置
                                                                                                                              location ~ .*\.(jpg|jpeg|gif|png|js|css)$
                                                                                                                              {
                                                                                                                              expires 30d;
                                                                                                                              access_log /dev/null;
                                                                                                                              valid_referers none blocked pewae.com www.pewae.com;
                                                                                                                              if ($invalid_referer){
                                                                                                                              return 404;
                                                                                                                              }
                                                                                                                              }
                                                                                                                              #SECURITY-END
                                                                                                                              include enable-php-71.conf;
                                                                                                                              #PHP-INFO-END

                                                                                                                              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/|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(/|$)
                                                                                                                              {
                                                                                                                              try_files $uri =404;
                                                                                                                              fastcgi_pass unix:/tmp/php-cgi-71.sock;
                                                                                                                              fastcgi_index index.php;
                                                                                                                              include fastcgi.conf;
                                                                                                                              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                                                                                                                              include /www/server/nginx/conf/fastcgi_params;
                                                                                                                              fastcgi_param QUERY_STRING $query_string;
                                                                                                                              fastcgi_param REQUEST_METHOD $request_method;
                                                                                                                              fastcgi_param CONTENT_TYPE $content_type;
                                                                                                                              fastcgi_param CONTENT_LENGTH $content_length;
                                                                                                                              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”;
                                                                                                                              fastcgi_cache WORDPRESS;
                                                                                                                              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_valid 200 301 302 1d;
                                                                                                                              }

                                                                                                                              #缓存清理配置(可选模块,请细看下文说明)
                                                                                                                              location ~ /purge(/.*) {
                                                                                                                              allow 127.0.0.1;
                                                                                                                              allow xxx.xxx.xxx.xxx;
                                                                                                                              deny all;
                                                                                                                              fastcgi_cache_purge WORDPRESS “$scheme$request_method$host$1”;
                                                                                                                              }

                                                                                                                              #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
                                                                                                                              include /www/server/panel/vhost/rewrite/pewae.com.conf;
                                                                                                                              #REWRITE-END

                                                                                                                              #禁止访问的文件或目录
                                                                                                                              location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
                                                                                                                              {
                                                                                                                              return 404;
                                                                                                                              error_log off;
                                                                                                                              access_log /dev/null;
                                                                                                                              }

                                                                                                                              location ~* (/wp-content/.*\.php|/wp-includes/.*\.php|/xmlrpc\.php$|/(?:uploads|files)/.*\.php$) {
                                                                                                                              deny all;
                                                                                                                              error_log off;
                                                                                                                              access_log /dev/null;
                                                                                                                              }

                                                                                                                              location ~ ^/wp-admin/admin-ajax.php$ {
                                                                                                                              allow all;
                                                                                                                              }

                                                                                                                              #一键申请SSL证书验证目录相关设置
                                                                                                                              location ~ \.well-known{
                                                                                                                              allow all;
                                                                                                                              }

                                                                                                                              location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
                                                                                                                              {
                                                                                                                              expires 30d;
                                                                                                                              error_log off;
                                                                                                                              access_log /dev/null;
                                                                                                                              }

                                                                                                                              location ~ .*\.(js|css)?$
                                                                                                                              {
                                                                                                                              expires 12h;
                                                                                                                              error_log off;
                                                                                                                              access_log /dev/null;
                                                                                                                              }

                                                                                                                              access_log /www/wwwlogs/pewae.com.log;
                                                                                                                              error_log /www/wwwlogs/pewae.com.error.log;
                                                                                                                              }

                                                                                                                              • avatar 大致 1

                                                                                                                                @大鸟 算了,不弄了,我改成用redis了。

                                                                                                                              • avatar 大鸟 6

                                                                                                                                @大致 额,redis简单点,nginx搞起来确实有点门槛。 :mrgreen: :mrgreen:

                                                                                                                              • avatar 大鸟 6

                                                                                                                                折腾的时候还是要细心一点,防止出现什么灵异的错误。

                                                                                                                                • avatar 大鸟 6

                                                                                                                                  @小白,看来不是缓存问题引起的,应该是你的数据表崩溃了。
                                                                                                                                  解决方法
                                                                                                                                  登录到你的 phpmyadmin 后台,然后找到你这个网站的数据库,接着找到错误提示中的’wp_options’这张表进行修复即可,或者可以执行 SQL 语句“ REPAIR TABLE `wp_options` ”执行修复表操作。

                                                                                                                                  • avatar 小白 2

                                                                                                                                    张戈的看不大懂,刚好用宝塔,用你的配置成功了,真的快了很多,特别是TTFB时间缩短了一秒多啊,比memcached和Batcache,WP-Rocket给力多了,折腾了好几个缓存,最后结论是fastcgi_cache>memcached和Batcache>WP-Rocket,谢谢大大!

                                                                                                                                      • avatar 大鸟 6

                                                                                                                                        @小白 不错,总结的很好,nginx缓存效果确实很好。

                                                                                                                                          • avatar 小白 2

                                                                                                                                            @大鸟 你好,大神,现在有个问题,只有开始配置有效,后面访问首页nginx-cache都是MISS了,是怎么回事呢?难道也有命中率的?

                                                                                                                                              • avatar 大鸟 6

                                                                                                                                                @小白 恩,确实是的,有命中率的问题,你可以重启nginx看看! :idea:

                                                                                                                                                  • avatar 小白 2

                                                                                                                                                    @大鸟 你好,还发现一个问题,404页面出现了这样的提示:Warning: mysqli_query(): (HY000/1030): Got error -1 from storage engine in /www/wwwroot/我的域名/wp-includes/wp-db.php on line 1924,是那么配置错了吗?

                                                                                                                                                      • avatar 大鸟 6

                                                                                                                                                        @小白 感觉是你的服务器的问题,你是谁家的vps?

                                                                                                                                                          • avatar 小白 2

                                                                                                                                                            @大鸟 选了个小众的,后悔了,一之家的香港VPS,现在所有页面都有这个提示了,而且文章的阅读数也不会变化了,我暂停了fastcgi_cache缓存,还是有这个提示,😅

                                                                                                                                                              • avatar 大鸟 6

                                                                                                                                                                @小白 磁盘问题,被限制了。你去掉这个缓存吧。

                                                                                                                                                                  • avatar 小白 2

                                                                                                                                                                    @大鸟 不行了,暂停了fastcgi_cache缓存,删除所有的配置,还是会有提示:Warning: mysqli_query(): (HY000/1030): Got error -1 from storage engine in /www/wwwroot/我的域名/wp-includes/wp-db.php on line 1924,阅读量倒是会变化了,难道得重建,哭

                                                                                                                                                                      • avatar 大鸟 6

                                                                                                                                                                        @小白 看起来像是数据表崩溃的感觉啊,你数据库备份了吧。你修复数据库看看。会么?

                                                                                                                                                                        • avatar 大鸟 6

                                                                                                                                                                          @小白 解决方法
                                                                                                                                                                          登录到你的 phpmyadmin 后台,然后找到你这个网站的数据库,接着找到错误提示中的’wp_options’这张表进行修复即可,或者可以执行 SQL 语句“ REPAIR TABLE `wp_options` ”执行修复表操作。

                                                                                                                                                                          • avatar 小白 2

                                                                                                                                                                            @小白 好像好了,自己忘记把防护关了,写入不进去,醉了😅

                                                                                                                                                          • avatar 简单生活 2

                                                                                                                                                            不错,看着有些复杂,想折腾心有余力不足啊!目前用WP-Rocket还行,2.9.9开心版!你说的这个早些时候在张戈博客看到过!

                                                                                                                                                              • avatar 大鸟 6

                                                                                                                                                                @简单生活 欢迎支持,我这小站就是用的nginx缓存。额,张戈大神是有这个教程,但是宝塔面板用起来会稍微不一样。

                                                                                                                                                                  • avatar 简单生活 2

                                                                                                                                                                    @大鸟 话说用了这个缓存,memcached可以卸了?还是搭配用好?

                                                                                                                                                                      • avatar 大鸟 6

                                                                                                                                                                        @简单生活 没有冲突,可以和谐共存。