一. 安装nginx最新稳定版本和nginx_ngx_cache_purge模块
略……
二. 配置nginx fastcgi cache 和purge 首先在http范围内(您也可以根据需要添加到server配置内)添加下面配置: fastcgi_cache_path /data0/nginx-1.2.6/cache levels=1:2 keys_zone=nginx_webpy_cache:1m inactive=1d;fastcgi_temp_path /data0/nginx-1.2.6/cache/temp;fastcgi_cache_key "$scheme$request_method$host$request_uri$is_args$args"; 这三行配置说明如下:
需要特别注意nginx运行用户必须有上面配置的缓存路径和临时路径的读写权限, 否则缓存不了 然后需要在location配置中根据需要添加相应的缓存配置
fastcgi_cache nginx_webpy_cache; #指定使用缓存共享内存的名字,和上面定义相对应 fastcgi_cache_valid 200 302 1h; #指定200和302要缓存的时长 fastcgi_cache_valid 301 1d; #指定301要缓存的时间 fastcgi_cache_valid any 10m; #指定其他状态号要缓存的时间 fastcgi_cache_min_uses 1; #指定缓存的最少使用次数 fastcgi_ignore_headers "Cache-Control" "Expires" "Set-Cookie"; #指定要忽略fast cgi cache输出的头 fastcgi_hide_headers "Set-Cookie"; #指定在输出缓存时要忽略的http相应头 fastcgi_cache_use_stale error timeout invalid_header http_500; #指定500的处理 fastcgi_cache_valid 60m; #指定一般性的缓存时间 add_header X-Cache $upstream_cache_status; #添加表示缓存是否命中的响应头
这里fastcgi cache相关的配置在注释#fastcgi cache def 和 #end之间,每一行都有对应的注释,这里要特别注意fastcgi_ignore_headers这个不配置会导致缓存的状态一直是MISS。 以上配置完毕后,就可以在浏览器中查看是否成功缓存了,但是只缓存还是不够的,我们还需要在需要的时候能够清除缓存,必须马上清除对应url的缓存,这样用户才可以马上看到修改后的结果。 如下是purge缓存相关的配置: location ~ /purge(/.*) { allow 127.0.0.1; # deny all; fastcgi_cache_purge nginx_webpy_cache "$scheme$request_method$host$1$is_args$args"; } 这个配置使用了nginx_ngx_cache_purge模块,这个配置里面首先要指定purge url的规则为 /purge(/.*) purge后的括号内的正则表达式要在下面使用,在location里面的allow指定允许那些ip访问purge,deny all配置禁止其他所有ip访问此路径; fastcgi_cache_purge nginx_webpy_cache "$scheme$request_method$host$1$is_args$args"; 指定purge对应的cache名称为nginx_webpy_cache,其缓存键的格式为$scheme$request_method$host$1$is_args$args,这里$1就是在location正则括号内定义的部分,这个键值要和上面缓存的键值一致。
以上文字转载:http://outofmemory.cn/code-snippet/2154/nginx-webpy-fastcgi-cache-configuration-explain-in-detail
偶遇到的未解决问题 1、动态URL,用purge无法清除,不知道为什么。如 www.xxxx.com/date.php?id=1 ,www.xxx.com/date.php则可以。
心得: 1、PURGE与伪静态 在配置缓存时,location判断的是实际的动态URL地址,PURGE中的KEY则是浏览器的地址,也就是伪静态URL。
2、以下几个语句,配用if使用,可以方便地配置哪些缓存,哪些不缓存。 set $skip_cache 1;
fastcgi_cache_bypass $skip_cache; $skip_cache=1时不缓存,=0时缓存。fastcgi_no_cache $skip_cache;
|