fastcgi_cache生效需四点对齐:缓存路径、键值规则、响应头过滤、跳过逻辑;任一错误都会导致$upstream_cache_status显示bypass或missed。

要让 fastcgi_cache 真正生效并带来秒级响应提升,关键不是“开了没”,而是缓存路径、键值规则、响应头过滤和跳过逻辑这四点是否全部对齐。配置错任意一环,$upstream_cache_status 就永远显示 BYPASS 或 MISSED,页面还是直连 PHP-FPM。
确认Nginx支持且缓存模块已就绪
宝塔或 phpEnv 环境下,不能只看面板显示的 Nginx 版本。必须实测:
进入 Nginx 主配置(如 /www/server/nginx/conf/nginx.conf),在 http { 后第一行插入:
fastcgi_cache_path /tmp/test_cache levels=1:2 keys_zone=test:1m inactive=1m use_temp_path=off;- 保存后点【重载配置】或执行
nginx -t;若报unknown directive,说明当前 Nginx 未编译 fastcgi_cache 模块,需升级到 1.22+ 或换装“nginx-full”版本。
创建可写缓存目录并授权给 www 用户
缓存路径必须由 Nginx worker 进程用户(宝塔/多数环境为 www)完全可写,否则缓存文件根本不会生成:
- 执行命令创建结构化目录:
mkdir -p /www/server/nginx/cache/fastcgi/{temp,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f}(levels=1:2要求两级子目录) - 赋权:
chown -R www:www /www/server/nginx/cache/fastcgi && chmod -R 755 /www/server/nginx/cache/fastcgi - 验证:
sudo -u www touch /www/server/nginx/cache/fastcgi/test不报错才算成功
定义稳定 cache_key 并禁用干扰响应头
默认 $scheme$request_method$host$request_uri 在实际中极易失效——比如 WordPress 搜索页 /search/?s=nginx 全部被当成同一 URI 缓存。
- 推荐加
$args:fastcgi_cache_key "$scheme$request_method$host$request_uri$args"; - 但绝不能含
$cookie_*或$http_user_agent,除非你真要做登录态/设备级区分缓存 - PHP 脚本常输出
Cache-Control: no-cache或Set-Cookie,Nginx 默认会跳过缓存——必须显式忽略:fastcgi_ignore_headers Cache-Control Expires Set-Cookie; - 若后端返回
X-Accel-Expires,它会覆盖fastcgi_cache_valid,此时加:fastcgi_hide_header X-Accel-Expires;
在 location 中精准启用 + 安全跳过敏感请求
仅在 location ~ \.php$ 块内配置才有效,漏掉 fastcgi_cache_valid 就等于没配:
- 启用缓存区:
fastcgi_cache phpcache;(名称须与keys_zone一致) - 设定有效期:
fastcgi_cache_valid 200 301 302 30s; 404 10s;(动态站建议从 30 秒起步,压测后再拉长) - 跳过逻辑必须成对出现:
set $skip_cache 0;<br>if ($request_uri ~* "/wp-admin/|/wp-login.php|/admin/|/user/") { set $skip_cache 1; }<br>if ($http_cookie ~* "wordpress_logged_in|PHPSESSID|comment_author") { set $skip_cache 1; }<br>fastcgi_no_cache $skip_cache;<br>fastcgi_cache_bypass $skip_cache; - 加调试头:
add_header X-Cache "$upstream_cache_status";,访问时看响应头是否出现HIT
不复杂但容易忽略
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











