Web 性能

Nginx FastCGI Cache:让动态页面获得静态速度

FastCGI Cache 可以在 Nginx 层直接返回 PHP 响应,但正确的绕过与失效策略比“开启缓存”更重要。

2026-07-28约 7 分钟

缓存路径与缓存键

fastcgi_cache_path /var/cache/nginx levels=1:2
  keys_zone=APP:100m inactive=60m max_size=1g;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

缓存键必须覆盖会改变响应内容的关键维度,但不要随意加入 User-Agent,否则会造成缓存碎片。

必须绕过的请求

fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header X-FastCGI-Cache $upstream_cache_status always;

验证命中

清空缓存后连续请求同一 URL。第一次应为 MISS,后续请求应为 HIT。同时确认登录用户和后台请求始终绕过缓存。

curl -I https://example.com/
curl -I https://example.com/
# X-FastCGI-Cache: MISS -> HIT

失效与陈旧缓存

发布内容时应精准清除首页、文章页和相关归档。对短暂的上游故障,可配置 use_stale 提高可用性,但需要配合监控,避免长期掩盖故障。

缓存不是数据库一致性的替代品。任何涉及权限、价格和用户数据的响应,都应默认不缓存。