当我们使用 Nginx 作为 web 服务器时,为了提高性能,我们经常会使用 FastCGI 缓存来提升网站的响应速度。但是当缓存过期或者需要刷新缓存时,我们就需要使用缓存清理功能。在本篇攻略中,我将详细介绍如何配置 Nginx 的 FastCGI 缓存清理功能。
1. 安装 FastCGI 缓存插件
在开始配置缓存清理之前,你首先需要安装 ngx_cache_purge
模块。该模块是 Nginx 的一个缓存清理插件,它允许你使用 HTTP 请求来删除 FastCGI 缓存。可以通过以下命令安装:
cd /usr/local/src
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar -zxvf ngx_cache_purge-2.3.tar.gz
cd nginx-1.20.0/
./configure --add-module=/usr/local/src/ngx_cache_purge-2.3/
make && make install
安装完毕后,你需要在 Nginx 配置文件中添加以下内容:
load_module modules/ngx_http_cache_purge_module.so;
这一行代码包含在 http
配置块中。
2. 配置 FastCGI 缓存
在启用缓存清理功能之前,你需要在 Nginx 中启用 FastCGI 缓存。在 Nginx 中启用缓存非常简单,只需要在 server 配置块中添加以下代码:
location / {
# 使用 FastCGI 缓存
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
# 设置缓存过期时间
add_header X-Cache-Expire $upstream_cache_expires;
fastcgi_cache_valid 200 60m;
fastcgi_cache_bypass $http_pragma;
fastcgi_cache_revalidate $http_cache_control;
}
在上面的代码中,我们使用了 $upstream_cache_expires
变量来设置缓存过期时间,这个变量的值是后端服务器返回的 Cache-Control
响应头部中 max-age
参数值。
3. 配置缓存清理
配置 FastCGI 缓存清理也很简单,我们只需要在对应的 server 配置块中添加一条 location
配置来实现缓存清理。例如,在以下配置中,我们设置了清理 “/blog” 路径下的缓存:
location /purge-blog {
# 定义缓存的 key
fastcgi_cache_key "$scheme$request_method$host$request_uri";
# 定义缓存清理规则
allow all;
deny all;
proxy_cache_purge my_cache "$scheme$request_method$host/blog";
}
在上面的代码中,我们定义了一个名为 purge-blog
的 location,并且在其中使用了 proxy_cache_purge
来清理 FastCGI 缓存。在这里,我们使用了 allow all; deny all;
来限制该 location 只能通过 HTTP 来访问,这样可以保证缓存清理请求不会被其他请求误触发。
4. 测试缓存清理
你可以使用以下命令来测试缓存清理:
curl -X PURGE http://example.com/purge-blog
这条命令将通过 HTTP 请求来清理 FastCGI 缓存。在执行完该命令之后,你可以访问对应的网页,查看缓存是否已经被清理。如果缓存已经被清理,网页应该重新生成。
另外,你也可以通过日志来查看缓存是否已经被清理。在 Nginx 的错误日志中,你可以找到以下信息:
2019/05/18 03:31:27 [notice] 17043#17043: *1 purge_blog: successful
这表示 FastCGI 缓存已经成功被清理了。
示例说明
示例 1
在这个示例中,我们要清理 “/blog” 路径下的缓存。
location /purge-blog {
# 定义缓存的 key
fastcgi_cache_key "$scheme$request_method$host$request_uri";
# 定义缓存清理规则
allow all;
deny all;
proxy_cache_purge my_cache "$scheme$request_method$host/blog";
}
在上述代码中,我们定义了一个名为 purge-blog
的 location,并在其中使用了 proxy_cache_purge
来清理 FastCGI 缓存。在这里,我们使用了 allow all; deny all;
来限制该 location 只能通过 HTTP 来访问。
示例 2
在这个示例中,我们要清理 “/category” 路径下特定分类的缓存。
location ~ /purge-category/(.*)$ {
# 定义缓存的 key
fastcgi_cache_key "$scheme$request_method$host$request_uri";
# 定义缓存清理规则
allow all;
deny all;
proxy_cache_key "$scheme$request_method$host/category/$1$is_args$args";
proxy_cache_purge my_cache "$scheme$request_method$host/category/$1$is_args$args";
}
在上述代码中,我们使用了正则表达式来匹配要清理的分类。当我们通过 HTTP 请求 /purge-category/{category_name}
时,Nginx 会通过缓存清理规则来清理 /category/{category_name}
路径下的缓存。