nginx 的 proxy_cache 缓存配置
开头:某个项目涉及到 视频切片下载到本地,然后提供服务给客户端。一个视频有多个文件,存储在本地路径下。当客户端请求的视频在本地没有就会回源,
回源拿到的视频文件再返回给客户端,同时在本地缓存一份,提供给下一个相同请求的用户。
可参考另一位大佬的讲解 https://blog.csdn.net/dengjiexian123/article/details/53386586/
https://blog.csdn.net/f529352479/article/details/51445320
https://blog.csdn.net/hero00e/article/details/52858196 缓存的指令 、结构体
本文结合项目关于缓存的使用情况来展开。
1. 配置 proxy_cache 模块
在 nginx.conf 文件添加 如下代码:
proxy_cache_path /mnt/zxdfs/service/ottcache/cachevod levels=: keys_zone=cachefile:100m inactive=180d max_size=148g limitedexpiredfiles= expiredtimeinterval=- expired_percent=;
代码说明:
proxy_cache_path 缓存文件路径
levels 设置缓存文件目录层次;levels=1:2 表示两级目录
keys_zone 设置缓存名字和共享内存大小.【在使用的地方要使用相同的变量名】
inactive 在指定时间内没人访问则被删除
max_size 最大缓存空间,如果缓存空间满,默认覆盖掉缓存时间最长的资源。
这些是默认有的配置,当然可以根据自己业务的需求对缓存有其他新增的配置说明。
当配置好之后,重启nginx,如果不报错,则配置的proxy_cache会生效
2. 使用 proxy_cache
使用proxy_cache ,需要在另一个location配置使用条件:
location /internal_proxyfile
{
internal;
sendfile off;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Connection "keep-alive";
proxy_set_header Accept-Encoding ""; proxy_cache_use_stale error timeout updating http_502 http_504;
#此处是托底配置,旧的总比出错强,当nginx请求后台服务器报错的时候,
#如果返回配置的错误响应码,nginx则直接取缓存文件中的旧数据返回给用户,托底使用必选配置。 proxy_cache_lock off;
#缓存并发锁,当nginx缓存没有命中的时候只有一个请求回源tomcat请求数据,其他请求会等待。非必选配置。
#意思就是 当多个请求传递到此配置时即他们的proxy_cache_key 是一样的,那多个请求只有一个才会真正回源【即到真正应用阶段生成响应内容】,
#最后将响应内容 添加到 cache ,然后其他请求 就从cache 获取数据,或直到超时。
proxy_cache_lock_timeout 20s;
#等待锁超时时间设置 非必选配置。 proxy_ignore_headers Cache-Control Expires; proxy_cache cachefile;
# 配置了缓存空间名称,具体可以看节点的 proxy_disk.conf ,不同的请求对应不同的空间名称。
proxy_cache_valid 180d;
# 根据响应码设置缓存时间,超过这个时间即使缓存文件中有缓存数据,nginx也会回源请求新数据。 proxy_cache_key $cdn_cid;
proxy_cache_prefix_dir $cpid_cid;
proxy_pass $upstream_url;
# 代理后转发的路径
}
在第一次访问到达该location时候,本地是没有缓存的,会在最后经过 proxy_pass 代理的路径处理完在本地【即 proxy_cache 配置的缓存路径缓存一份】;
同一个url第二次访问,再次到达该location,proxy_cache 会在自己的缓存路径找到对应的缓存文件,就会直接返回给客户端,无需向后续的代理路径转发。
nginx 的 proxy_cache 缓存配置的更多相关文章
- nginx的proxy_cache缓存配置
为什么要做web cache,我想大家最主要的是解决流量的压力.随着网站流量的提升,如果只是单台机器既处理静态文件,又处理动态脚本,显然效率很难上升,不能处理日益上涨的流量压力.与此同时某些网站的页面 ...
- 使用Nginx的proxy_cache缓存功能取代Squid(转)
Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意URL链接,同时也支持404/301/302 ...
- 使用Nginx的proxy_cache缓存功能取代Squid
Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意URL链接,同时也支持404/301/302 ...
- 使用Nginx的proxy_cache缓存功能取代Squid[原创]
使用Nginx的proxy_cache缓存功能取代Squid[原创] [文章作者:张宴 本文版本:v1.2 最后修改:2009.01.12 转载请注明原文链接:http://blog.zyan.cc/ ...
- NGINX负载均衡缓存配置
环境:VMware-Workstation-12-Pro,Windows-10,CentOS-7.5,Xshell5 1 概述 如果我们的架构是前端负载均衡后端WEB集群时,可以开启nginx的缓存功 ...
- nginx反向代理缓存配置
关于nginx的反向代理缓存配置,用的最多的就是CDN公司,目前CDN公司用纯nginx做缓存的已经很少了,基本都用tnginx(阿里的).openresty:但是这两款软件都是基于nignx开发的, ...
- Nginx 静态资源缓存配置
示例 # Media: images, icons, video, audio, HTC location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|m ...
- Nginx 学习笔记(三)proxy_cache 缓存配置和ngx_cache_purge模块
反向代理的缓存清理 一.proxy_cache配置 (1)如何配置和安装,都在这里了:https://github.com/Tinywan/Lua-Nginx-Redis/blob/master/Ng ...
- nginx缓存配置的操作记录梳理
web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...
随机推荐
- kmeans均值聚类算法实现
这个算法中文名为k均值聚类算法,首先我们在二维的特殊条件下讨论其实现的过程,方便大家理解. 第一步.随机生成质心 由于这是一个无监督学习的算法,因此我们首先在一个二维的坐标轴下随机给定一堆点,并随即给 ...
- Android8.1 开关VOLTE流程分析
前言 最近有需求需要实现插卡默认打开Volte功能,顺带研究了下Volte的流程,在此做个记录 开始 从Settings设置界面入手,网络和互联网-->移动网络-->VoLTE高清通话(电 ...
- 通过Android反编译技术研究国内陌生人社交即时通讯的技术方案
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/100 即时通讯IM类App分析 这两周对国内陌生人社交领域 ...
- TensorFlow从1到2(十二)生成对抗网络GAN和图片自动生成
生成对抗网络的概念 上一篇中介绍的VAE自动编码器具备了一定程度的创造特征,能够"无中生有"的由一组随机数向量生成手写字符的图片. 这个"创造能力"我们在模型中 ...
- UnitTest和Developer
UnitTest对项目很重要,这是很多developer都明白的道理,可是真的让所有的developer对自己的代码写UnitTest,似乎是不可能的. developer完全可以以已经有很多task ...
- [LeetCode] 42. Trapping Rain Water 收集雨水
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- 第04组 Beta冲刺(4/5)
队名:new game 组长博客 作业博客 组员情况 鲍子涵(队长) 过去两天完成了哪些任务 地图移动 接下来的计划 素材和脚本相连 引入声音素材 还剩下哪些任务 让游戏本体运行 遇到了哪些困难 时间 ...
- linux--新装机图形化界面遇到的问题
1 许可证信息 q 退出 c 继续 r 刷新 按以下顺序正确输入即可: 1 ------ 2 ----- q ----- yes
- Mybatis和Hibernate框架的区别
Mybatis和Hibernate框架的区别1 简单简介 1.1 Hibernate 框架 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,建立对象与数据 ...
- python接口自动化6-参数化关联
前言 接口中我们经常需要用到参数关联,比如,登录token,需要传给后面的参数使用,又比如要查看某个商品需要将商品的id传入下一个接口使用. 等等,所以我们必要学会 re 正则获取,或者返回json获 ...