(6)fastcgi_cache_key指令
语法:fastcgi_cache_key line ;
该指令用来设置Web缓存的Key值,Nginx根据Key值md5哈希存储缓存.一般根据FastCGI服务器的地址和端口,$request_uri(请求的路径)等变量组合成fastcgi_cache_key。
fastcgi_cache缓存配置的完整示例
1)首先,在同一分区下创建两个缓存目录,分别供fastcgi_temp_path,fastcgi_cache_path指令设置缓存路径.
注意:两个指定设置的缓存路径必须为同一磁盘分区,不能跨分区.
[root@test-huanqiu src]# mkdir -p /usr/local/nginx/fastcgi_temp_path
[root@test-huanqiu src]# mkdir -p /usr/local/nginx/fastcgi_cache_path
2)配置文件nginx.conf对扩展名为gif,jpg,jpeg,png,bmp,swf,js,css的图片,Flash,JavaScript,CSS文件开启Web缓存,其他文件不缓存.
[root@test-huanqiu src]# vim /usr/local/nginx/conf/nginx.conf
........
http{
#fastcgi_temp_path和fastcgi_cache_path指定的路径必须在同一分区
fastcgi_temp_path /usr/local/nginx/fastcgi_temp_path ;
#设置Web缓存区名称为cache_one,内存缓存空间大小为500MB,自动清除超过1天没有被
#访问的缓存数据,硬盘缓存空间大小为30G
fastcgi_cache_path /usr/local/nginx/fastcgi_cache_path levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g ;
........
}
--------------------------------------分割线 --------------------------------------
[root@test-huanqiu src]# vim /usr/local/nginx/conf/vhosts/wang.conf
server{
.......
location ~ .*\.(php|php5)$ {
#使用Web缓存区cache_one
fastcgi_cache cache_one ;
#对不同的HTTP状态码缓存设置不同的缓存时间
fastcgi_cache_valid 200 10m ;
fastcgi_cache_valid 301 302 1h ;
fastcgi_cache_valid an 1m ;
#设置Web缓存的key值,Nginx根据key值md5哈希存储缓存,这里根据"FastCGI服务
#器的IP,端口,请求的URI"组合成Key。
fastcgi_cache_key 127.0.0.1:9000$requet_uri ;
#FastCGI服务器
fastcgi_pass 127.0.0.1:9000 ;
fastcgi_index index.php ;
include fcgi.conf ;
}
}
我的个人示例主配置文件: 下面 $upstream_cache_status表示资源缓存的状态,有HIT MISS EXPIRED三种状态
log_format access '$remote_addr,$http_x_forwarded_for,$remote_user,$time_local,$host,$request,$status,$request_uri,$http_referer,$reques
t_time,$http_user_agent,$upstream_cache_status';
proxy_temp_path /usr/local/nginx110/proxy_temp_dir 1 2;
proxy_cache_path /data/ifengsite/proxy_cache_dir/cache1 levels=1:2 keys_zone=cache1:200m inactive=1d max_size=100g;
upstream houseservers {
server 10.0.10.31:80 max_fails=3 fail_timeout=60 weight=1;
server 10.0.10.32:80 max_fails=3 fail_timeout=60 weight=1;
server 10.0.10.33:80 max_fails=3 fail_timeout=60 weight=1;
}
server配置文件:注意purge的location需要处于被缓存的内容的location的前面,否则会被匹配拦截,无法准确匹配到purge!
location / {
proxy_pass ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location ~ /purge(/.*) {
allow 127.0.0.1;
allow 10.0.0.0/16;
deny all;
proxy_cache_purge cache1 $1$is_args$args;
}
location ~* \.(jpg|html|shtml)$ {
proxy_pass ;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_add;
proxy_cache cache1;
proxy_cache_key $uri$is_args$args;
add_header X-Cache $upstream_cache_status;
proxy_ignore_headers "Cache-Control" "Expires" "Set-Cookie";
expires 15d;
}
这个缓存是把链接用md5编码hash后保存,所以它可以支持任意链接,同时也支持404/301/302这样的非200状态
查看你的nginx是根据什么作为key来hash的,我的设置是 proxy_cache_key $uri$is_args$args; 因此nginx会根据$uri$is_args$args作为key进行hash,因此可以模拟nginx对一个key进行再hash找到相应的文件路径,删除(具体可随意找个缓存文件 more 一下看看)