安装nginx依赖扩展,当typecho更新时调用http-cache-purge删除缓存,当命中缓存时调用lua清除set-cookie head,防止缓存的设置cookie header发送给所有人。
1 | apt install libnginx-mod-http-cache-purge libnginx-mod-http-lua |
http内添加:
1 2 3 4 | 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段:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 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