如何配置Nginx的FastCGI缓存有效时间?

  

配置Nginx的FastCGI缓存有效期时间需要进行以下几个步骤:

  1. 在Nginx配置文件中启用FastCGI缓存模块

在Nginx配置文件的http模块中添加如下代码

http {
    ...
    fastcgi_cache_path /path/to/cache levels=1:2 keys_zone=my_cache_zone:10m inactive=60m;
    ...
}

这段代码中定义了FastCGI缓存的存储位置、缓存目录结构、缓存空间的名字以及缓存的过期时间。

  1. 在server模块中启用FastCGI缓存

在server模块中添加如下代码

location ~ \.php$ {
    fastcgi_cache my_cache_zone;
    fastcgi_cache_valid 200 60m;
    fastcgi_cache_bypass $http_pragma;
    fastcgi_cache_revalidate on;
    include fastcgi_params;
    ...
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}

这段代码中使用正则表达式匹配所有的PHP请求。然后使用fastcgi_cache指令启用FastCGI缓存。使用fastcgi_cache_valid指令设置缓存比对响应状态码和过期时间,这里设置为200状态码60分钟后过期。使用fastcgi_cache_bypass指令用于检查是否会跳过缓存。fastcgi_cache_revalidate指令用于刷新缓存。最后添加include fastcgi_params,将所有FastCGI参数包含到当前请求。使用fastcgi_pass指令将请求转发给PHP-FPM处理。

  1. 检查FastCGI缓存是否生效

在server模块中添加类似如下代码,启用Nginx的access日志记录功能:

server {
    access_log /var/log/nginx/access.log;
    ...
}

接下来访问PHP网页,检查access日志记录中是否有缓存Hit的记录。如果有,则表示FastCGI缓存已经生效,如果没有则表示FastCGI缓存没有生效。

示例:

例如我们希望对于php请求启用FastCGI缓存并设置缓存有效期为半小时,则需要进行如下配置:

http {
    fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache_zone:10m inactive=60m;
 }

server {
    location ~ \.php$ {
        fastcgi_cache my_cache_zone;
        fastcgi_cache_valid 200 30m;
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }
}

其中fastcgi_cache_valid 200 30m;表示缓存的有效期为30分钟。

又例如,我们希望对WP前端页进行FastCGI缓存的话,可以按如下代码进行配置:

http {
    fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache_zone:10m inactive=60m;
 }

server {
    location / {
        try_files $uri $uri/ /index.php?$query_string;

        # Enable cache for WP front-end pages
        fastcgi_cache my_cache_zone;
        fastcgi_cache_valid 200 30m;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;

        # Bypass cache for backend requests
        fastcgi_cache_bypass $http_pragma;
        fastcgi_cache_revalidate on;
        fastcgi_cache_valid 200 1m;

        # Add cache headers to backend responses
        add_header X-Cache $upstream_cache_status;
        add_header Cache-Control "public, max-age=$cache_max_age";
    }
}

其中location /设置了对网站首页和其他页面的缓存,fastcgi_cache_valid 200 30m;表示缓存的有效期为30分钟。

相关文章