Nginx配置反向代理缓存proxy_cache

Nginx配置反向代理缓存proxy_cache

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

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

设置缓存目录路径

上面说的临时目录用proxy_temp_path来指定目录路径,而真实缓存目录用proxy_cache_path来指定目录路径,这两句一段都放在http模块下(可以设置多个proxy_cache_path给不同的server模块用,只要proxy_cache_pathkeys_zone不同即可):

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_cache_path /data/wwwcache/mattermost levels=1:2 use_temp_path=off keys_zone=mattermost_cache: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指定的目录(如果没有内存虚拟的硬盘,建议设置为off,因为设置为on反而多了一步重命名),该特性是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

打赏

订阅评论
提醒
guest

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x

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

Nginx配置反向代理缓存proxy_cache