Nginx配置反向代理缓存proxy_cache

Nginx配置反向代理缓存proxy_cache

Nginx的反向代理缓存有两个目录,一个是临时目录,一个是真实缓存目录,缓存时,会先把数据保存到临时目录,最后保存完成再移动到真实目录。

这个过程,就相当于php上传文件,先会保存到临时目录(tmp_name),再移动到真实目录(只不过php移动到真实目录是我们自己写代码,用move_uploaded_file()函数移动过去)。此外,如果有条件,还可以把临时目录指定为内存映射成的“内存硬盘”,这样会非常快。

设置缓存目录路径

上面说的临时目录用proxy_temp_path来指定目录路径,而真实缓存目录用proxy_cache_path来指定目录路径,这两句一段都放在http模块下(因为这样各个server都可以使用它):

http{
    //.....
    proxy_temp_path  /data/wwwcache/proxy_temp;
    proxy_cache_path /data/wwwcache/nginx levels=1:2 use_temp_path=off keys_zone=STATIC:200m inactive=24h max_size=1g;
    //.....
}

说明:临时缓存目录,不一定要设置,也就是说你可以不用临时目录,这样就会直接把缓存写入到真实缓存目录中,如果你想使用临时目录,除了要用proxy_temp_path定义一个临时目录路径外,还需要把proxy_cache_path的use_temp_path设置为on,这样才会使用临时目录,如果你不设置use_temp_path=on,那么它默认就是on,除非你把它设置为off,它才是off,但是如果你没有设置为off也没有设置proxy_temp_path,理论上它是要使用临时目录但是又没有指定临时目录,所以它会不使用临时缓存目录。

  1. 参数levels=1:2 指定缓存空间为二级hash目录,第一级为1个字符,第二级为2个字符,比如/7/c2。
  2. use_temp_path如果为on,则内容首先被写入临时文件(proxy_temp_path指定的目录),然后重命名到proxy_cache_path指定的目录;如果设置为off,则内容直接被写入到proxy_cache_path指定的目录,如果需要cache建议off,则该特性是1.7.10提供的。proxy_temp_path和proxy_cache_path必须指定为同一磁盘分区。
  3. 参数keys_zone=STATIC:200m 用户存放key和元数据的缓存区间,命名为STATIC,最大占用内存200m。
  4. 参数inactive=24h 如果资源在24h内未被请求,从缓存区中清除。
  5. 参数max_size=1g 指定本地缓存空间的大小,如果资源过于庞大时,按照LRU算法进行清除。

使用代理缓存

在具有proxy_pass语句的location里面,添加proxy_cache相关语句即可指定在proxy_pass时使用proxy_cache_path中的缓存:

location / {
    proxy_pass http://image_server;
    proxy_set_header Host localhost;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    #代理缓存,STATIC是缓存的keys_zone名称,是在http模块下统一设置了(即在nginx.conf文件中)
    proxy_cache STATIC;
    proxy_cache_key $host$uri$is_args$args;
    proxy_cache_valid 200 304 10m;
}

说明:
1. proxy_cache STATIC;表示使用前面http模块里定义的名为STATIC的缓存,这个名字是可以随便定义的,也就是说如果你前面定义的名字是abc,那这里也是写abc。
2. proxy_cache_key指定缓存所使用的key的组合字符串,然后用md5进行加密。
3. proxy_cache_valid表示缓存http状态码为200(表示成功)的时间为10 分钟

重启nginx,随便刷新一个页面,然后查看proxy_cache_path指定的目录是否生成了文件,如果是,那说明已经成功了。

参考文章:
深入浅出Nginx之六【代理缓存与负载均衡】
nginx设置proxy cache

打赏

Leave a Reply

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
Notify of

扫码在手机查看
iPhone请用自带相机扫
安卓用UC/QQ浏览器扫

Nginx配置反向代理缓存proxy_cache