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 缓存的核心原理

概念说明
FastCGINginx 与后端应用(如 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️⃣ 生产优化调整缓存时间和键,监控命中率


不容错过
Powered By TOPYUN 云产品资讯