好好学习,天天折腾
捣鼓来捣鼓去,有那么一点点进步也不错

WordPress提速:宝塔面板Nginx启用fastcgi_cache缓存

什么是fastcgi_cache缓存?

在了解FastCGI缓存和浏览器缓存之前,我们先来简单说说Nginx的缓存机制。缓存就像是一个临时仓库,当客户端(比如浏览器)向服务器请求资源时,如果这个资源已经被缓存起来了,服务器就可以直接从缓存中取出该资源返回给客户端,而不需要重新去处理请求,这样可以大大节省时间和服务器资源。

Nginx的缓存机制主要有两种类型,一种是FastCGI缓存,另一种是浏览器缓存。FastCGI缓存主要用于缓存动态内容,而浏览器缓存则是让浏览器本地存储一些静态资源,下次访问时可以直接从本地读取。

FastCGI是一种用于在Web服务器和应用程序之间进行高效通信的协议。FastCGI缓存就是将FastCGI应用程序生成的动态内容进行缓存,用于提高动态内容的性能。它特别适合处理FastCGI协议的应用,比如 PHP(Wordpress)。fastcgi_cache缓存从系统层面实现网页静态化,生成缓存需依赖Nginx (PHP不参与),资源占用少很多,速度更快,极大减少服务器负担、并发能力。

宝塔面板启用fastcgi_cache为网站加速

本文以宝塔面板为基础,面板环境安装过程中已经默认加载了ngx_cache_purge模块

检查模块是否安装

nginx -V 2>&1 | grep -o ngx_cache_purge   

如果正确安装则返回如下内容

创建缓存目录

makedir -P /var/run/nginx-cache
chown -R www:www /var/run/nginx-cache

这里用命令行创建了一个nginx-cache的文件,并将所有者设置为www用户和组,这个也可以通过宝塔的文件管理进行设置

配置全局的nginx设置

打开nginx配置文件,在http组中找到 include mime.types;在后面填写如下代码

# 定义缓存池 
fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_503;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

配置网站的nginx设置

打开网站设置中的配置文件,在server组中填写如下内容

#nginx helper option start
    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!如果你的网站使用PHP7.4,就写-74.sock
    location ~ \.php$
    {
        try_files $uri =404;  # 防遍历漏洞
        include fastcgi_params;
        fastcgi_pass unix:/tmp/php-cgi-82.sock;  # 宝塔PHP82默认sock,根据使用的版本修改
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        # 缓存核心逻辑(与主配置缓存池匹配)
        fastcgi_cache WORDPRESS;
        fastcgi_cache_valid 200 301 302 60m;
        fastcgi_cache_valid 404 1m;
        fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_503;
        fastcgi_cache_bypass $skip_cache;
        fastcgi_no_cache $skip_cache;
        fastcgi_cache_lock on;
        fastcgi_cache_lock_timeout 10s;
        fastcgi_cache_key "$scheme$request_method$host$request_uri";

        # 再次强制注入调试头(双重保障)
        add_header X-FastCGI-Cache $upstream_cache_status always;
        add_header X-Skip-Cache $skip_cache always;
    }
    #缓存清理配置
    location ~ /purge(/.*) {
    	allow 127.0.0.1;
    	deny all;
    	fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
    }

配置wp-config.php

在文件管理中打开wp-config.php文件,在后面添加

define( 'RT_WP_NGINX_HELPER_CACHE_PATH','/var/run/nginx-cache');
define( 'WP_CACHE', true);

完成上述配置后,重载nginx配置,并重新启动

Nginx Helper插件配置

安装插件

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

配置插件

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

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

清理模式选择

①purge 模式

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

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

②文件模式

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

由于插件作者定义的缓存路径是 /var/run/nginx-cache ,而我们可能会根据服务器实际情况来自定义缓存路径,这样一来,缓存路径的不同就会导致插件无法找到缓存文件并删除!这个问题已经在上面的wp-config.php的配置中解决了

我的插件配置功能如下图

验证缓存状态

使用浏览器隐身模式打开网站前台(未登录状态),按 F12 进入开发者工具 > “网络” > 点网址> 点“标头”查看详情。

HIT:缓存成功
MISS:缓存失败,建议刷新页面2次看下有没有变成HIT。
BYPASS:跳过缓存
EXPIRED:缓存过期

细节处理

Cache-Control信息显示no-cache

启用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即可。

动态内容

由于FastCGI_Cache会缓存PHP请求,可能会导致网站异常。例如阅读量计数失效、缓存评论者信息、缓存登陆界面等,需要添加额外代码排除。因此不建议新手使用FastCGI_Cache缓存。FastCGI_Cache缓存需要使用专门缓存插件。

经测试define( ‘WP_CACHE’, true)在本站主题使用过程中可以解决点赞、阅读缓存不变化的情况

赞(1)
未经允许不得转载:业余程序猿 » WordPress提速:宝塔面板Nginx启用fastcgi_cache缓存

评论 抢沙发

登录

找回密码

注册