TOP云提供高性价比云服务器租用,有中国内地/港澳台、海外等全球各地节点,TOP云国内云服务器只要有域名备案号就能直接用,无须重复备案;港澳台及海外云服务器不用备案,购买之后直接使用,省时省力省心。价格实惠,续费同价,2核2G5M仅需27元每月,8核8G50M仅需66元每月,更多配置套餐请进入下面网址了解:
TOP云总站云服务器:https://topyun.vip/server/buy.html
TOP云C站云服务器:https://c.topyun.vip/cart
在云服务器上启用 Nginx FastCGI 缓存 可以显著提升动态网站(如 PHP、Python、Perl 等后端生成的内容)的性能,通过缓存动态页面的响应结果,减少后端处理时间,降低服务器负载,提高响应速度。
一、Nginx FastCGI 缓存的核心原理
概念 | 说明 |
---|---|
FastCGI | Nginx 与后端应用(如 PHP-FPM)通信的协议,用于执行动态脚本 |
FastCGI 缓存 | Nginx 将 FastCGI 生成的动态响应缓存到磁盘或内存中,后续请求直接返回缓存结果 |
适用场景 | 动态网站(如 WordPress、Laravel、Django 等),尤其是内容更新不频繁的页面 |
与 Proxy Cache 的区别:
FastCGI Cache 是 Nginx 直接缓存 FastCGI(如 PHP-FPM)的响应。
Proxy Cache 是 Nginx 缓存后端 HTTP 服务器(如另一个 Nginx 或 Tomcat)的响应。
二、在云服务器上启用 Nginx FastCGI 缓存的步骤
1. 确认环境
操作系统:Linux(如 Ubuntu 20.04、CentOS 7/8)
Nginx 版本:建议 1.10+(FastCGI Cache 在较新版本中更稳定)
后端应用:PHP-FPM(或其他 FastCGI 应用)
检查 Nginx 是否支持 FastCGI Cache:
nginx -V 2>&1 | grep -o with-http_fastcgi_cache_module
如果输出 with-http_fastcgi_cache_module,说明已支持。
2. 配置 Nginx FastCGI 缓存
(1)在 Nginx 配置文件中定义缓存路径和参数
编辑 Nginx 的主配置文件(通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf),在 http 块中添加以下内容:
http {
# 定义 FastCGI 缓存路径、级别、大小和有效期
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=MYCACHE:100m inactive=60m use_temp_path=off;
# 其他 http 配置...
}
参数说明:
fastcgi_cache_path:定义缓存存储路径。
/var/cache/nginx:缓存文件存放目录(需确保 Nginx 用户有读写权限)。
levels=1:2:缓存目录分级(1 级子目录,2 级子目录),避免单个目录文件过多。
keys_zone=MYCACHE:100m:定义缓存区域名称为 MYCACHE,内存中缓存键的空间为 100MB(可存储大量缓存键)。
inactive=60m:如果缓存数据在 60 分钟内未被访问,则自动清理。
use_temp_path=off:禁用临时路径,直接写入缓存目录(提升性能)。
注意:
确保 /var/cache/nginx 目录存在且 Nginx 用户(如 www-data 或 nginx)有读写权限:
sudo mkdir -p /var/cache/nginx
sudo chown -R www-data:www-data /var/cache/nginx # Ubuntu/Debian
sudo chown -R nginx:nginx /var/cache/nginx # CentOS/RHEL
(2)在 Server 或 Location 块中启用 FastCGI 缓存
在需要缓存的 server 或 location 块中添加以下配置:
server {
listen 80;
server_name yourdomain.com;
location / {
# 启用 FastCGI 缓存
fastcgi_cache MYCACHE;
fastcgi_cache_valid 200 301 302 10m; # 缓存 HTTP 200/301/302 响应 10 分钟
fastcgi_cache_valid any 1m; # 缓存其他状态码(如 404)1 分钟
fastcgi_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; # 缓存失效时使用旧缓存
fastcgi_cache_background_update on; # 后台更新缓存(避免阻塞请求)
fastcgi_cache_key "$scheme$request_method$host$request_uri"; # 定义缓存键
# 添加响应头,方便调试缓存状态
add_header X-Cache-Status $upstream_cache_status;
# FastCGI 配置(如 PHP-FPM)
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 根据实际 PHP 版本调整
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
关键参数说明:
fastcgi_cache MYCACHE:指定使用的缓存区域(与 keys_zone 名称一致)。
fastcgi_cache_valid:定义不同 HTTP 状态码的缓存时间:
200 301 302 10m:成功响应缓存 10 分钟。
any 1m:其他状态码(如 404)缓存 1 分钟。
fastcgi_cache_use_stale:当后端故障或缓存更新时,允许返回旧缓存(提升可用性)。
fastcgi_cache_background_update:后台更新缓存,避免阻塞新请求。
fastcgi_cache_key:定义缓存键(根据协议、方法、域名和 URI 生成唯一键)。
add_header X-Cache-Status:在响应头中添加缓存状态(HIT、MISS、BYPASS、REVALIDATED 等)。
(3)排除不需要缓存的请求
某些动态请求(如登录页面、API 接口)不应缓存,可通过 fastcgi_no_cache 和 fastcgi_cache_bypass 排除:
location / {
fastcgi_cache MYCACHE;
fastcgi_cache_valid 200 10m;
# 不缓存以下请求:
# 1. 带 Cookie 的请求(如登录用户)
# 2. 带 Authorization 头的请求(如 API)
# 3. 特定路径(如 /admin/、/api/)
set $skip_cache 0;
if ($http_cookie ~* "wordpress_logged_in|comment_author|wp-postpass") {
set $skip_cache 1;
}
if ($http_authorization) {
set $skip_cache 1;
}
if ($request_uri ~* "/admin/|/api/") {
set $skip_cache 1;
}
fastcgi_no_cache $skip_cache;
fastcgi_cache_bypass $skip_cache;
# 其他配置...
}
3. 测试并重载 Nginx
(1)检查 Nginx 配置语法
sudo nginx -t
(2)重载 Nginx 使配置生效
sudo systemctl reload nginx # 或 sudo service nginx reload
三、验证 FastCGI 缓存是否生效
1. 使用 curl 检查响应头
curl -I http://yourdomain.com/
如果缓存命中,会看到类似以下响应头:
HTTP/1.1 200 OK X-Cache-Status: HIT # 表示缓存命中 ...
如果未命中,会显示:
HTTP/1.1 200 OK X-Cache-Status: MISS # 表示缓存未命中 ...
2. 查看缓存文件
缓存文件默认存储在 /var/cache/nginx 目录中,可通过以下命令查看:
sudo ls -l /var/cache/nginx/
缓存文件是二进制格式,无需手动修改。
四、生产环境优化建议
优化方向 | 建议 |
---|---|
缓存时间 | 根据业务需求调整 fastcgi_cache_valid(如静态页面 1 小时,动态内容 1 分钟) |
缓存键 | 确保 fastcgi_cache_key 包含足够的信息(如用户语言、设备类型)以实现精准缓存 |
排除动态请求 | 通过 fastcgi_no_cache 和 fastcgi_cache_bypass 排除登录页、API 等动态内容 |
监控缓存命中率 | 通过日志或工具(如 Prometheus + Grafana)统计 X-Cache-Status 的 HIT 比例 |
内存与磁盘平衡 | 如果服务器内存充足,可增大 keys_zone 大小(如 100m → 200m) |
五、常见问题
1. 缓存未生效?
检查 Nginx 配置是否正确(尤其是 fastcgi_cache_path 和 fastcgi_cache 指令)。
确保响应头中没有 Set-Cookie 或 Cache-Control: no-cache 等禁用缓存的指令。
确认请求的 URL 和参数完全一致(缓存键基于完整 URI)。
2. 如何手动清除缓存?
Nginx FastCGI 缓存默认不提供直接清除命令,但可通过以下方式:
删除缓存文件:
sudo rm -rf /var/cache/nginx/*
重启 Nginx(不推荐,影响性能):
sudo systemctl restart nginx
高级方案:通过 nginx-cache-purge 模块实现精准清除(需重新编译 Nginx)。
六、总结:Nginx FastCGI 缓存配置流程
步骤 | 操作 |
---|---|
1️⃣ 定义缓存路径 | 在 http 块中配置 fastcgi_cache_path |
2️⃣ 启用缓存 | 在 server 或 location 块中添加 fastcgi_cache 相关指令 |
3️⃣ 排除动态请求 | 使用 fastcgi_no_cache 和 fastcgi_cache_bypass |
4️⃣ 测试验证 | 通过 curl -I 检查 X-Cache-Status |
5️⃣ 生产优化 | 调整缓存时间和键,监控命中率 |