Nginx缓存配置以及nginx ngx(4)

(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 一下看看)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/cf9ba58fdd8f088abc60012ac2277cb6.html