Nginx+Fastcgi配置

适配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;


}

点此查看nginx+fastcgi压力测试

Scroll to Top