/ 中存储网

Nginx配置反向代理时cache缓存的使用方法

2014-04-02 15:29:01 来源:ITJS.CN
nginx的反代理功能一直很强大,无奈过去没有很好的cache机制,在0.7.44版里新加入的proxy cache功能后,发展至今,这个功能已经很完善和稳定,感觉有种替代传统cache如squid的趋势啊。

配置一下,很简单,配合上nginx的规则过滤真的很强大啊,简单http部分配置如下:

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

#### proxy_cache_path 指令指定缓存的路径和一些其他参数,缓存的数据存储在文件中。缓存的文件名和key为代理URL的MD5 码。levels参数指定缓存的子目录数,所有活动的key和元数据存储在共享的内存区域中,这个区域用keys_zone参数指定,keys_zone指定缓存的名字和共享内存大小,如果在inactive参数指定的时间内缓存的数据没有被请求则被删除,默认inactive为10分钟。cache manager进程控制磁盘的缓存大小,在max_size参数中定义,超过其大小后最少使用数据将被删除。

    proxy_cache_path /www/ng_cache levels=1:2 keys_zone=tmp_cache:1000m inactive=1d max_size=10000m;

    upstream backend {

        server 10.0.8.1:80

    }

    server {

        listen       80;

   server_name  localhost;

#### proxy_temp_path 必须和 proxy_cache_path 在同一分区

        proxy_temp_path /www/ng_tmp;

        location / {

            proxy_pass http://backend;

#### proxy_cache设置一个缓存区域的名称,一个相同的区域可以在不同的地方使用。在0.7.48后,缓存遵循后端的Cache-Control, Expires以及其他等。缓存依赖代理的缓冲区,如果proxy_buffers设置为off,将不会生效。

            proxy_cache tmp_cache;

#### proxy_cache_key 指定了包含在缓存中的缓存关键字(默认情况下服务器的主机名并没有包含到缓存关键字中)

            proxy_cache_key $host$uri$is_args$args;

#### 只对代码为200, 301和302的应答进行缓存10分钟

 proxy_cache_valid 10m;

        }

#### purge缓存的设置

        location ~ /purge(/.*) {

           allow     127.0.0.1;

           deny               all;

#### proxy_cache_purge 设置要purge的缓存名字和cache_key(需和proxy_cache_key对应,不然会purge成404,要使用purge,需在编译nginx的时候加上第三方的cache_purge模块)

   proxy_cache_purge  tmp_cache $host$1$is_args$args;

        }

    }

}

但proxy_cache好像没办法跟squid样的在多个不同分区同时设置缓存目录和文件,不过nginx可以通过nginx的做法,我是先多设置几个proxy_cache_path指定不同分区取不同名字,然后起多个server监听不同端口缓存到不同的proxy_cache_path,再通过upstream的url_hash或者其他方式反代理过去,测试还是很好使的~~