适配WordPress+Woocommerce
http块内配置
## 该配置放在cache.conf文件中,在http块内使用 include cache.conf 引入
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=wordpress:100m inactive=60m max_size=1g;
# 定义不缓存的请求条件
map $request_method $skip_cache_by_method {
default 0;
"GET" 0;
"HEAD" 0;
"POST" 1;
"PUT" 1;
"DELETE" 1;
"PATCH" 1;
}
map $request_uri $skip_cache_by_uri {
default 0;
~*^/wp-(?:admin|login) 1;
~*preview=true 1;
~*^/cart/?$ 1;
~*^/checkout/ 1;
~*^/my-account 1;
~*[?&]add-to-cart= 1;
~*^\?add-to-cart= 1;
~*^/wc-ajax/ 1;
~*^/wp-admin/admin-ajax.php 1;
~*^/wp-json/ 1;
}
# Cookie检测(您已经有的部分)
map $http_cookie $skip_cache_by_cookie {
default 0;
# ~wordpress_logged_in 1;
# ~comment_author 1;
# ~woocommerce_cart_hash 1;
# ~woocommerce_items_in_cart 1;
# ~wp_woocommerce_session 1;
}
# 合并所有不缓存条件
map "$skip_cache_by_method$skip_cache_by_uri" $skip_cache {
default 0;
~*1 1; # 任何一个条件为1就跳过缓存
}
map "$skip_cache_by_method$skip_cache_by_uri$skip_cache_by_cookie" $skip_cache_reason {
default "";
~^1..$ "Method";
~^.1.$ "URI";
~..1$ "Cookie";
}
server块内配置
location ~ \.php$ {
include rules/pass2php.conf;
# 缓存设置
fastcgi_cache wordpress;
fastcgi_cache_key "$scheme$request_method$host$request_uri$is_args$args";
fastcgi_cache_valid 200 301 302 10m; # 缓存 10 分钟
fastcgi_cache_use_stale error timeout invalid_header updating;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache_valid any 1m;
# 缓存锁(防止缓存击穿)
fastcgi_cache_lock on;
fastcgi_cache_lock_timeout 5s;
# 添加缓存状态头
add_header X-FastCGI-Cache $upstream_cache_status always;
# 调试头信息
add_header X-Skip-Cache-Method $skip_cache_by_method always;
add_header X-Skip-Cache-URI $skip_cache_by_uri always;
add_header X-Skip-Cache $skip_cache always;
add_header X-Cache-Bypass-Reason $skip_cache_reason always;
}