如果你用的wordpress建站,之前已经配置Redis缓存进行了数据库缓存优化。
本文介绍的是Nginx开启fastcgi_cache缓存加速,直接使用Nginx为页面生成缓存来加速wordpress,而且还支持html伪静态页面,效率较高,也比较适合小配置的VPS上使用。下面飞牛尽量用最精简的语言准确地描述开启Nginx fastcgi_cache加速的过程,请严格遵照步骤操作。
一、Nginx配置实例
宝塔默认已经安装ngx_cache_purge模块,只需要通过修改配置文件来启用此模块。选择对应网站,点击设置,修改配置文件!(注意这里的配置文件,是对应网站的配置文件,不是主nginx模块的配置文件)
1、首先,将以下代码复制到配置文件顶部(里面代码需要在dev/shm/目录创建新文件夹,命名为nginx-chache(记住Nginx-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_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
2、然后在server字段下添加以下代码,建议按照飞牛的添加在 #SSL-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;
}
#如果需要对所有用户缓存,请将以上代码改为下方的,两段代码只可任选其一
#if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+") {
#set $skip_cache 1;
#}
#这里请参考你网站之前的配置,特别是sock的路径,弄错了就502了!关于sock,宝塔面板的在/www/server/php/74/etc/php-fpm.conf中有配置路径宝塔面板的sock
location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi-74.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";
}
注意代码里面需要修改的地方:
1)add_header Cache-Control如果是动态内容要实时更新的话,可以设置为0,否则可以设置时间大一些。
2)sock的路径一定要填对,否则会出现502错误,关于sock,宝塔面板的在/www/server/php/74/etc/php-fpm.conf中有配置路径宝塔面板的sock。
3)代码里面的服务器公网IP换成你的服务器公网IP。
二、安装WordPress插件Nginx Helper
前面步骤完成后,我们需要在wordpress后台安装插件,进入WordPress 后台插件安装界面搜索 Nginx Helper 关键词在线安装即可。
1、开启purge,选择nginx Fastcgin cahe,因为就我们用就是这个缓存。
2、选择 Delete local server cache files。当然第一个也可以用,但是一般推荐用Delete local server cache files,因为每个服务器的环境都不一样,缓存路径也会不尽相同就会导致插件无法找到缓存文件并删除!
3、插件下面还提供了其它的一些设置,功能非常丰富,例如发表新文章、新评论时是否更新Nginx缓存等,根据自己需要勾选即可。
清理模式选择
①、purge 模式
这个模式需要保留上文 Nginx 配置中的 purge 清理路径,清理的时候会产生一个请求。
出于安全考虑,一般 purge 都不会完全开放!只有特定的 IP 可以访问,所以,如果用了 CDN 的朋友,再使用模式一,则需要在服务器上的 /etc/hosts 中将网站域名解析为服务器真实 IP,以便插件直接请求 purge 路径,而不用走 CDN 节点,避免请求被拒绝。还是没搞懂的话就放弃这个模式吧!
②、文件模式
模式二是直接清理对应的缓存文件,不需要请求 purge 这个清理路径,所以使用模式二,不需要配置上文 Nginx 的 purge 规则(我个人使用这个模式)。
三、修改缓存路径
由于插件作者定义的缓存路径是 /var/run/nginx-cache ,而我们可能会根据服务器实际情况来自定义缓存路径,这样一来,缓存路径的不同就会导致插件无法找到缓存文件并删除。
添加以下代码到WordPress根目录的wp-config.php文件中。
define('RT_WP_NGINX_HELPER_CACHE_PATH','/dev/shm/nginx-cache');
飞牛是将缓存文件配置在内存里的,毕竟内存OI比一般的普通磁盘要快。如果你磁盘性能较好,挂载目录为/data或者使用系统盘,那么就需要修改/dev/shm/nginx-cache为你的实际缓存磁盘!
保存以上的内容,重新启动Nginx,这样就成功实现了fastcgi_cache缓存。
四、细节调整
1、如果出现评论过的用户依然用的是缓存,那应该是wordpress没有记住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);
}
2、启用fastcgi_cache缓存时,发现在Nginx配置文件中添加了Cache-Control信息,但是总是不生效。HTTP头部信息会总会包含以下信息:Cache-Control: no-store,no-cache,must-revalidate,post-check=0,pre-check=0 和 Pragma: no-cache
修改宝塔面板中php7.4配置文件中的session.cache_limiter,默认值是 nocache ,将它设置为none即可,如图:
五、效果检测
服务器的缓存路径中能看到Nginx fastcgi_cache生成的缓存文件。
刷新页面,当前端页面头部header出现如下图所示的HIT,表示命中,fastcgi_cache缓存加速成功配置。
对于已经设置了不缓存的页面,Nginx fastcgi_cache会直接显示BYPASS,如果是登录状态是不显示缓存的。
按照教程一顿操作以后,你已经部署了后端redis和前段页面Nginx fastcgi_cache,你的wordpress应该在速度上有一个很大的提高。
如果想继续加快网站的访问速度,你可以利用对象存储和cdn进行动静分离和加速。关于这个,飞牛也是折腾了很多次也很久,最终慢慢掌握了点道道,你可以参考下面的文章。
typecho 也有类似的教程
但是我开启了pjax 不知道会不会出问题 一直没去折腾看看!!
@夏目贵志 你这有备案放国内,而且typecho又轻量,其实不用太折腾优化之类的。我这主要还是WordPress,又放境外小水管,图片比较多,只能这样。
@飞牛 我现在用的香港 哈哈 8核16g内存的主机 一天2元,感觉国外的性价比高就搬家出来了!
图床可以试试 https://www.jingtaiboke.com/unicloud-upload-demo.html 你搞过网站应该懂得!!
图片全是阿里云cdn加速免费的。就是我那你问我的图床哈 !当然你也可以放我这里 但是你不要介意图片子在我这里!