前言
用Typecho的时候,发现Typecho没有一个类似于Wordpress的NginxHelper能自动清除缓存的插件,于是我就做了一个出来。
经过了接近几个小时学习插件+调试,这个插件终于诞生了,我给他取名叫NginxHelper,旨在为Wordpress的NginxHelper插件致敬。
插件功能
- 当有人评论,文章推送,新建页面的时候,自动清理nginx缓存
- 当文章,页面被修改时自动清理相对应缓存
- 支持自动预缓存功能,可一键自动缓存所有页面
使用方法
第一步,配置nginx缓存规则,具体可参考挖站否-开启Nginx fastcgi_cache缓存加速方法-Nginx配置实例,适当更改http_cookie和request_uri
第二步,先下载源码(地址),把nginxhelper文件夹扔到typecho插件目录(usr/plugins)
第三步,更改Plugin.php文件中$NGINX_CACHE_PATH改为你的Nginx缓存路径
路径最后面无需带/ !!!图片如下:
最后一步,启用NginxHelper插件,完工了
附赠Nginx缓存规则(非Stable版本)
这堆放在server{上
请注意cache_path也就是缓存目录,要提前创建,而且要正确填在$NGINX_CACHE_PATH里
fastcgi_cache_path /tmp/nginx levels=1:2 keys_zone=TYPECHO:250m inactive=1d max_size=500m;
fastcgi_temp_path /tmp/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;
这堆放在server{里面
set $cache 0;
#post访问不缓存
if ($request_method = POST) {
set $cache 1;
}
#动态查询不缓存
if ($query_string != "") {
set $cache 1;
}
if ($request_uri ~* "/purgeall/|/action/|/admin/|/admin/*.php|/feed/|/sitemap/|index.php|sitemap(_index)?.xml") {
set $cache 1;
}
if ($http_cookie ~* "PHPSESSID|typecho_authCode|typecho_uid|typecho_remember_mail|typecho_remember_author|typecho_remember_url") {
set $cache 1;
}
location ~ .*\.php(\/.*)*$ {
#fastcgi_pass remote_php_ip:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
#fastcgi_param PATH_INFO $path_info;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
#新增的缓存规则
fastcgi_cache_bypass $cache;
fastcgi_no_cache $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 TYPECHO;
fastcgi_cache_valid 200 301 302 1d;
}
完工了。
留个标记,以后说不定会用到
July 24th, 2019 at 12:07 am 回复WP需要安装ngx_cache_purge模块,为啥TP不用就成功了呢?
August 14th, 2019 at 09:29 am 回复这个缓存有点问题,登陆缓存了+评论者被缓存,查看了Typecho_Cookie写法不对
September 12th, 2019 at 11:36 am 回复一直显示miss,不知道为啥。
November 15th, 2019 at 01:49 pm 回复一开始能够正常hit,后来不知道为什么就不行了,但是把网站及其配置文件转移到另一台vm(内存1g)上可以hit。出问题的那台内存512,可能与内存有关吗?
November 15th, 2019 at 04:59 pm 回复找到原因了。。关掉etag on就好了。。。
November 16th, 2019 at 12:36 pm 回复刚才是巧合。。。好像是tpcache的残余
November 16th, 2019 at 12:50 pm 回复奇葩的是我得开启tpcache然后禁用tpcache,才可以正常hit。我尝试着注释掉include fastcgi.conf,也能正常hit,就是画面不显示而已。。。。
November 16th, 2019 at 01:41 pm 回复话说这个清理缓存插件可以直接集成到主题?
October 10th, 2020 at 03:06 pm 回复不能。插件是插件,主题是主题。
November 5th, 2020 at 05:59 pm 回复