文档首页> 技术教程> 用 fastcgi_cache 给 WordPress 提速

用 fastcgi_cache 给 WordPress 提速

发布时间:2026-09-16 16:16        更新时间:2026-09-17 01:07
WordPress 每次页面访问都要跑一遍 PHP、查十几条 SQL,访客一多 CPU 就顶不住。fastcgi_cache 让 Nginx 把 PHP 输出直接缓存成文件,匿名访客命中缓存时完全绕开 PHP-FPM,单机吞吐能上一个量级。 一、定义缓存区 nginx.conf 的 http 段: ``` fastcgi_cache_path /var/cache/nginx_fastcgi levels=1:2 keys_zone=wordcache:50m inactive=60m use_temp_path=off; fastcgi_cache_key "$scheme$request_method$host$request_uri"; ``` keys_zone 的 50m 是缓存索引用的共享内存,不是文件总大小上限;inactive 表示 60 分钟没被访问的缓存文件自动清除。缓存键把协议、方法、域名、路径都算进去,避免不同页面互相串。缓存区定义放在 http 层,站点配置里只引用名字,多个站点可以共用同一个缓存区,互不干扰。 二、站点配置与跳过逻辑 ``` set $skip_cache 0; if ($request_method = POST) { set $skip_cache 1; } if ($http_cookie ~* "wp-postpass|wordpress_logged_in|comment_author") { set $skip_cache 1; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_cache wordcache; fastcgi_cache_valid 200 301 302 30m; fastcgi_cache_bypass $skip_cache; fastcgi_no_cache $skip_cache; } ``` 两个跳过条件:POST 一律不缓存,提交表单、登录动作直接透传;三个 cookie 把登录用户、评论作者、输过密码的页面排除在缓存外,动态内容不会串到别人眼前。URL 带查询参数的请求同样建议跳过,加一条对 query_string 的判断即可。验证缓存是否命中,看响应头里的 X-Cache:第一次 MISS,刷新变 HIT 即生效。 三、清理缓存的办法 缓存都是普通文件,直接清目录:rm -rf /var/cache/nginx_fastcgi/* ,粗暴但有效。更优雅的方案是装 Nginx helper 插件配合 ngx_cache_purge 模块,文章发布时精准删除对应页面的缓存。不想加模块的折中:cron 每小时清一次,接受发布后最长一小时的不一致。缓存目录所在磁盘要留足空间,与日志同盘时互相挤占,定期 df 看一眼。 四、边界提醒 缓存会掩盖后端故障——源站挂了,缓存期内页面看起来一切正常,告警要挂在源站上而不是前端。404 默认不进缓存,有人刷不存在路径的请求会直接打穿到 PHP,量大时要单独防。后台预览、购物车这类动态功能,务必确认在跳过名单里。上线后用无痕窗口和登录态各验一遍主要页面,两边都对才说明跳过逻辑没有写漏。