跳转到主内容
极星编程网:以代码为星,赴技术山海!

Nginx中fastcgi_cache实现PHP页面缓存加速的实战教程

能显著降低PHP-FPM压力并提升并发响应速度;它由Nginx在反向代理层实现,命中时完全不触达PHP,效果接近静态页面,需正确配置fastcgi_cache_path、fastcgi_cache、fastcgi_cache_valid及缓存跳过逻辑,并忽略PHP返回的Cache-Control等禁用头。 直接用 Nginx 的
fastcgi_cache
缓存 PHP 页面,能显著降低后端 PHP-FPM 压力,提升并发响应速度。它不是插件式缓存,而是由 Nginx 在反向代理层完成的底层缓存,命中时完全不触达 PHP,效果接近静态页面。 确认 Nginx 支持并启用 fastcgi_cache 模块 宝塔面板默认安装的 Nginx(1.20+ 或 1.22+)已内置
--with-http_fastcgi_module
,但需验证是否可用: 进入【软件商店】→ 找到 Nginx → 【设置】→ 【配置修改】 在配置文件最顶部空白处添加一行测试配置:
fastcgi_cache_path /www/server/nginx/fastcgi_cache levels=1:2 keys_zone=phpcache:100m inactive=30m use_temp_path=off;
点击【保存】,若无“unknown directive”报错,说明模块就绪;否则需升级 Nginx 或重装支持版本 创建缓存目录并正确授权 缓存路径必须由 Nginx 工作进程用户(通常是
www
)可读写,否则目录始终为空、缓存永不生效: SSH 登录服务器,执行:
mkdir -p /www/server/nginx/fastcgi_cache
设置归属与权限:
chown -R www:www /www/server/nginx/fastcgi_cache && chmod -R 755 /www/server/nginx/fastcgi_cache
验证:
ls -ld /www/server/nginx/fastcgi_cache
应显示 owner 为
www
,且含
drwxr-xr-x
权限 在网站配置中定义缓存规则 进入【网站】→ 目标站点 → 【设置】→ 【配置文件】,在
server{...}
块内插入以下内容(放在
location ~ \.php$
上方或内部均可,推荐放内部): PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 立即学习 “ PHP免费学习笔记(深入) ”; 启用缓存区域:
fastcgi_cache phpcache;
(名称须与
keys_zone
一致) 设定缓存有效期:
fastcgi_cache_valid 200 301 302 10m;
fastcgi_cache_valid 404 1m;
控制跳过缓存的条件(关键!避免缓存登录态、后台、带参数页):
set $skip_cache 0;
if ($request_uri ~* "/wp-admin/|/wp-login.php|/admin/") { set $skip_cache 1; }
if ($query_string != "") { set $skip_cache 1; }
if ($http_cookie ~* "comment_author|wordpress_logged_in|wp-postpass") { set $skip_cache 1; }
关联跳过逻辑:
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
(可选)加响应头便于调试:
add_header X-Cache "$upstream_cache_status";
注意事项与常见问题 缓存生效依赖几个隐性前提,漏掉任一环节都会导致“配置写了但没缓存”: PHP 不得返回禁止缓存的响应头 :务必在配置中加入
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
,否则 PHP 输出的
Cache-Control: no-cache
会直接让 Nginx 放弃缓存 缓存 key 要合理 :推荐使用
fastcgi_cache_key "$scheme$request_method$host$request_uri";
,包含请求方法可避免 HEAD 请求污染 GET 缓存 不要跨站点共用 keys_zone :多站点部署时,每个站应配独立
keys_zone
名称和缓存路径,防止 key 冲突或误清 上线前用
curl -I 域名/某文章页
查看响应头中的
X-Cache: HIT
或
MISS
,结合
du -sh /www/server/nginx/fastcgi_cache
观察目录增长,双重验证是否真生效

相关文章