安装nginx依赖扩展,当typecho更新时调用http-cache-purge删除缓存,当命中缓存时调用lua清除set-cookie head,防止缓存的设置cookie header发送给所有人。
apt install libnginx-mod-http-cache-purge libnginx-mod-http-lua
http内添加:
fastcgi_cache_path /dev/shm/fastcgi_cache_dir levels=1:2 keys_zone=phpcache:100m inactive=30d max_size=200M;
fastcgi_temp_path /dev/shm/fastcgi_cache_dir/temp;
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
修改server段:
set $skip_cache 0;
#跳过缓存,post请求
if ($request_method = POST) {
set $skip_cache 1;
}
#url包含参数
if ($query_string != "") {
set $skip_cache 1;
}
#指定url
if ($request_uri ~* ^(/admin/|/action/|/search/|/feed/)) {
set $skip_cache 1;
}
#登录用户
if ($http_cookie ~* "typecho_authCode") {
set $skip_cache 1;
}
#$uri经过重写后会改变,通过lua提前复制到$permalink
set_by_lua_block $permalink {
return ngx.var.uri
}
location ~ .*\.php$
{
try_files $uri =404;
astcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
fastcgi_cache_key $scheme$request_method$host$permalink;
add_header Cache-State $upstream_cache_status;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache phpcache;
fastcgi_cache_valid 200 301 302 30d;
log_by_lua_file "/etc/nginx/ngx_lua_reqstatus/hook.lua";
header_filter_by_lua_block {
--if ngx.status == ngx.HTTP_OK then
--ngx.header['Cache-State'] = ngx.var.upstream_cache_status
--end
if ngx.var.upstream_cache_status == "HIT" then
ngx.header['Set-Cookie'] = nil
end
}
}
location ~ /xxx/_clean_cache(/.*) {
fastcgi_cache_purge phpcache "$scheme$request_method$host$1";
}
typecho清除缓存插件:
https://github.com/typecho-fans/plugins/tree/master/Ncache
typecho默认在用户评论后会在cookie内设置用户名和邮箱信息,并在服务端读取cookie在html内写入相关信息,这样用户信息被缓存所有人都可以看到,可参考下面方法修改模板用js读取cookie内用户信息。
https://cuojue.org/read/typecho_comments_author_javascript.html