此插件原作者 https://cuojue.org/read/typecho-fastcgi_cache.html


为了让接下来的步骤简洁,推荐使用宝塔面板(因已内置 Ngx_cache_purge 模块)

插件特性直接在nginx层缓存,媲美静态页面速度

php请安装7.4 版本


支持所有页面缓存

支持内容修改之后自动更新内容、分类、首页缓存

支持评论生效更新缓存

支持登录状态下不缓存

支持搜索等动态页面不缓存


更新日志


v1.0 初始版本

已知问题

非js方式的访问统计插件会失效


使用方法


步骤一:需要修改/www/server/nginx/conf/nginx.conf配置文件

将下列代码,添加到 Nginx.conf 文件的 server 字段上方即可


fastcgi_cache_path /www/server/nginx/fastcgi_cache_dir levels=1:2 keys_zone=fcache:250m inactive=1d max_size=1G;
fastcgi_temp_path /www/server/nginx/fastcgi_cache_dir/temp;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

小提示,缓存目录可自定义如下,也可按照下方路径创建目录并给予 777 权限:

1、路径 /www/server/nginx/fastcgi_cache_dir 需自行创建 并给予 777 权限

2、路径 /www/server/nginx/fastcgi_cache_dir/temp 需自行创建 并给予 777 权限

步骤二:进入宝塔面板找到需要设置的网站,点开配置文件,如下图

Typecho配置Fastcgi_Cache缓存,如静态一般丝滑

将下列代码复制到 上图 所标示的位置

#缓存扩展开始
set $skip_cache 0;
#post访问不缓存
if ($request_method = POST) {
  set $skip_cache 1;
}
#动态查询不缓存
if ($query_string != "") {
  set $skip_cache 1;
}
#pjax查询缓存
if ($query_string ~ "_pjax=(.*)") {
  set $skip_cache 0;
}
#后台等特定页面不缓存(其他需求请自行添加即可)
if ($request_uri ~* "/admin/|/action/|/search/|/feed/|baidu_sitemap.xml|sitemap.xml") {
  set $skip_cache 1;
}
#对登录的用户不展示缓存
if ($http_cookie ~* "typecho_authCode") {
  set $skip_cache 1;
}
location ~ [^/]\.php(/|$) {
  try_files $uri =404;
  fastcgi_pass unix:/tmp/php-cgi-74.sock;
  fastcgi_index index.php;
  include fastcgi.conf;
  include pathinfo.conf;
  #新增的缓存规则
  fastcgi_cache_bypass $skip_cache;
  fastcgi_no_cache $skip_cache;
  add_header X-自己取名-Cache "$upstream_cache_status From $host";
  fastcgi_cache fcache;
  fastcgi_cache_valid 200 1d;
}

location ~* /这里的token要求和后台一致/_clean_cache(/.*) {
  fastcgi_cache_purge fcache "$scheme$request_method$host$1$is_args$args";
}
header_filter_by_lua_block {
  ngx.header[ngx.var.hide_cookie] = nil;
}

Token演示:例如后台设置1150AE6A4F7938AE754D则这里设置为

location ~* /1150AE6A4F7938AE754D/_clean_cache(/.*) {
    fastcgi_cache_purge fcache "$scheme$request_method$host$1$is_args$args";
}

设置完成后,再宝塔面板中找到Nginx进程,重载进程,然后重启Nginx,在 Typecho 后台 启动插件即可

注意:插件里的token务必为 上面设置的,另外 目录,请和伪静态目录一致


缓存效果


替换新的配置,并且重载Nginx之后,访问前台页面,查看header,会多出一个 X-自己取名-Cache 标志。

X-自己取名-Cache 一般会有3个状态:MISS、HIT、BYPASS。

MISS表示未命中

即这个页面还没被缓存,新发布或刚被删除的页面,首次访问将出现这个状态(图略)。

HIT表示缓存命中

打开一个会缓存的页面,比如文章内容html页面,F5刷新几次即可在F12开发者模式当中的Header头部信息中看到如图缓存命中状态:

如出现下图所有 HIT 则缓存成功

Typecho配置Fastcgi_Cache缓存,如静态一般丝滑

下载地址:Ncache_v1.0.zip


关于缓存后,评论不更新以及页面统计数据不更新的设置方法

Typecho的页面浏览统计JavaScript版

handsome 主题缓存后修改