下面是如何配置Nginx的FastCGI缓存目录的完整攻略:
- 创建缓存目录
需要先在服务器上创建一个用于缓存的目录,比如 /var/cache/nginx/fastcgi
。你可以使用如下命令:
sudo mkdir -p /var/cache/nginx/fastcgi
sudo chown -R www-data:www-data /var/cache/nginx/fastcgi
其中 www-data:www-data
是 Nginx 运行用户和用户组,如果你在配置 Nginx 时使用的是其它用户,则需要相应地修改这个值。
- 配置 Nginx
找到你的 Nginx 配置文件,在 http
或者 server
块下添加如下配置:
fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=fastcgicache:100m inactive=60m;
其中:
/var/cache/nginx/fastcgi
是 FastCGI 缓存目录的路径;levels=1:2
表示缓存目录下的子目录个数,这里表示使用一级子目录和二级子目录;keys_zone=fastcgicache:100m
定义了缓存 key 的存储区域及其大小,这里将 key 存储区域命名为fastcgicache
,大小为 100MB;-
inactive=60m
指定了缓存内容的过期时间,这里设置为 60 分钟。 -
配置 FastCGI 缓存
继续在 Nginx 配置文件中添加如下配置:
location ~ \.php$ {
# ... 其它 PHP 相关配置
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $no_cache;
fastcgi_cache_valid 200 60m;
fastcgi_cache_valid 404 10m;
fastcgi_cache_min_uses 3;
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
}
其中:
fastcgi_cache_key "$scheme$request_method$host$request_uri"
定义了缓存的 key,这里使用了请求的协议、请求方法、主机名和请求 URI 进行组合;fastcgi_cache_bypass $skip_cache
定义了当$skip_cache
变量为1
时,不使用缓存;fastcgi_no_cache $no_cache
定义了当$no_cache
变量为1
时,不使用缓存,且会将带有缓存的响应头直接返回;fastcgi_cache_valid 200 60m
定义了当返回码为 200 时,缓存有效期为 60 分钟;fastcgi_cache_valid 404 10m
定义了当返回码为 404 时,缓存有效期为 10 分钟;fastcgi_cache_min_uses 3
定义了至少有 3 个请求才会将内容缓存;-
fastcgi_cache_use_stale error timeout invalid_header http_500
定义了当后端 FastCGI 出现错误、超时、返回无效的头或者返回 500 时,使用缓存响应。 -
测试缓存效果
完成上面的配置后,就可以测试缓存的效果了。可以使用以下命令来测试:
curl -I http://example.com/index.php
第一次访问会返回一个普通的 HTTP 响应头,第二次访问会返回带有 X-Cache-Status
响应头的 HTTP 响应。当响应头中包含 X-Cache-Status: HIT
时,表示请求使用了缓存。当响应头中包含 X-Cache-Status: MISS
时,表示请求没有使用缓存。
示例配置:
将 FastCGI 缓存存储在 /data/cache/nginx/fastcgi
目录下,缓存 key 使用请求 URI,仅缓存响应码为 200 的请求,并且缓存时间为 30 分钟。
http {
# ...
fastcgi_cache_path /data/cache/nginx/fastcgi levels=1:2 keys_zone=fastcgicache:100m inactive=30m;
server {
listen 80;
server_name example.com;
root /var/www/html;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $no_cache;
fastcgi_cache_key "$request_uri";
fastcgi_cache_valid 200 30m;
fastcgi_cache_min_uses 3;
include fastcgi_params;
}
}
}
将 FastCGI 缓存存储在 /var/cache/nginx/fastcgi
目录下,缓存 key 使用请求 URI,缓存时间分别为 10 分钟和 1 分钟,同时缓存 404 响应。
http {
# ...
fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=fastcgicache:100m inactive=10m;
server {
listen 80;
server_name example.com;
root /var/www/html;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $no_cache;
fastcgi_cache_key "$request_uri";
fastcgi_cache_valid 200 10m;
fastcgi_cache_valid 404 1m;
include fastcgi_params;
}
}
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何配置Nginx的FastCGI缓存目录? - Python技术站