当前位置: > Linux服务器 > nginx >

nginx fast_cache配置,减少PHP请求

时间:2014-05-15 01:43来源:linux.it.net.cn 作者:IT网

一. 安装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";

这三行配置说明如下:

  • 第一行指定了fastcgi缓存的路径为 /data0/nginx-1.2.6/cache , levels=1:2 表示生成缓存文件路径规则,示例:5/29/f08bc91a7a0ff59aad7121e2c1d79295,keys_zone=nginx_webpy_cache:1m 指定缓存使用共享内存的名称为nginx_webpy_cache共享内存大小为1m,inactive=1d表示缓存在1天之后过期,这个清除时间还没弄清是什么作用,控制过期时间在后面具体配置中生效。

  • 第二行指定fastcgi缓存的临时路径的地址

  • 第三行指定缓存键的格式$scheme$request_method$host$request_uri$is_args$args 这样配置的缓存键示例: httpGEToutofmemory.cn/code-snippet/2075/java-ArrayList-yichu-repeat-item

需要特别注意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;


 

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容