Nginx配置FastCGI缓存加速PHP需三处协同:1.全局定义缓存区(http块内),含路径授权、fastcgi_cache_path声明及fastcgi_cache_valid设有效期;2.站点级启用(server/location块),绑定缓存区、自定义fastcgi_cache_key、用cookie跳过登录用户;3.通过X-FastCGI-Cache响应头验证HIT/MISS/BYPASS状态。

在 Nginx 中配置 FastCGI 缓存加速 PHP,核心是让 Nginx 在将请求交给 PHP-FPM 之前先查缓存,命中就直接返回,跳过 PHP 执行和数据库查询。这不是改几行就能生效的“开关”,而是需要三处协同:全局缓存区定义、站点级缓存启用、以及精准的缓存控制逻辑。
1. 全局定义缓存区(http 块内)
缓存必须有存放位置和管理规则,这部分写在 nginx.conf 的 http{} 块最上方:
-
创建缓存路径并授权:比如
/var/cache/nginx/fastcgi_cache,确保 Nginx 主进程用户(通常是www或www-data)对该目录有读写权限:chown -R www:www /var/cache/nginx/fastcgi_cache -
声明缓存区:用
fastcgi_cache_path指令,例如:fastcgi_cache_path /var/cache/nginx/fastcgi_cache levels=1:2 keys_zone=phpcache:100m max_size=1g inactive=30m use_temp_path=off;
其中keys_zone=phpcache:100m是缓存区名称和内存大小,后续配置会引用它;inactive=30m表示 30 分钟没被访问的缓存条目会被自动清理。 -
设置默认缓存时间:用
fastcgi_cache_valid指定不同状态码的缓存时长,如:fastcgi_cache_valid 200 302 10m; fastcgi_cache_valid 404 1m;
2. 网站配置中启用缓存(server/location 块内)
仅定义不启用等于白搭。在对应网站的 location ~ \.php$ 区块内添加以下指令:
-
绑定缓存区:加一行
fastcgi_cache phpcache;(名称必须与keys_zone一致) -
构造缓存键:默认键可能太粗略,建议显式定义,例如:
fastcgi_cache_key "$scheme$request_method$host$request_uri";
这样能区分 HTTP/HTTPS、GET/POST、不同域名和完整 URL,避免混用。 -
跳过登录用户缓存:防止把个人页面缓存后错发给其他人,常用方式是检测 Cookie:
fastcgi_cache_bypass $cookie_session;<br>fastcgi_no_cache $cookie_session;
表示只要请求带session这个 Cookie,就不读也不写缓存。
3. 验证与调试缓存是否生效
配置完必须验证,否则可能一直“未命中”却不知原因:
-
加响应头便于观察:在 location 块里加上
add_header X-FastCGI-Cache $upstream_cache_status;。访问页面后看响应头,HIT表示命中,MIS表示未命中,BYPASS表示被跳过。 -
检查日志格式(可选):在 http 块里定义带
$upstream_cache_status的日志格式,再在 server 块里指定使用它,方便批量分析命中率。 -
注意请求方法限制:FastCGI 缓存默认只对
GET和HEAD请求生效,POST、PUT等不会缓存,这是安全设计,不用额外干预。
配置本身不复杂,但容易忽略权限、键构造、绕过逻辑这三个关键点。只要缓存目录可写、键能区分内容、私有请求被正确跳过,PHP 页面的 TTFB 就能从几百毫秒压到几十毫秒。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











