Nginx配置缓存
一.简介
proxy_cache模块用于反向代理,首先定义一个cache配置,后面使用中可以选择使用其中一个cache配置
原理:
客户端--nginx--后端程序
当客户端访问nginx时,nginx将访问后端程序,获得信息后再返回给客户端
客户端--nginx--nginx_cache--后端程序
现在客户端访问nginx时,nginx先根据url进行hash,看本地cache文件里是否有,有则传给客户端,没有则去后端程序获取。
默认情况下,NGINX需要考虑从原始服务器得到的Cache-Control标头。当在响应头部中Cache-Control被配置为Private,No-Cache,No-Store或者Set-Cookie,NGINX不进行缓存。NGINX仅仅缓存GET和HEAD客户端请求。你也可以参照下面的解答覆盖这些默认值。
Cache-Control是http网页缓存,当服务器发送给浏览器的http中含有public,则浏览器呈现来自缓存的页面。private则浏览器重新发送请求到服务器。
二.配置
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m
use_temp_path=off;
#path 缓存文件位置
#levels 设置缓存文件目录层次,1:2表示两级目录,将大量的文件放置在单个目录中会导致文件访问缓慢
#keys_zone 设置缓存名字和设置一个共享内存区,该内存区用于存储缓存键和元数据,有些类似计时器的用途。将键的拷贝放入内存可以使NGINX在不检索磁盘的情况下快速决定一个请求是有缓存条目(hit)还是没缓存条目(MISS),这样大大提高了检索速度。一个1MB的内存空间可以存储大约8000个key,那么上面配置的10MB内存空间可以存储差不多80000个key。
#max_size 最大缓存空间,如果缓存空间满,默认覆盖掉缓存时间最长的资源。
#inactive 在指定时间内没人访问则被删除
#use_temp_path 将在缓存这些文件时将它们写入同一个目录下,否则的话将会写到临时区域,再复制到目录下,重复了。
server {
...
location / {
proxy_cache my_cache; #使用上面定义的名字叫my_cache的配置
proxy_cache_revalidate on;
proxy_cache_min_uses 3;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
proxy_pass http://127.0.0.1:80;
}
#proxy_cache_revalidate 指示NGINX在刷新来自服务器的内容时使用GET请求。如果客户端的请求项已经被缓存过了,但是在缓存控制头部中定义为过期,那么NGINX就会在GET请求中包含If-Modified-Since字段,发送至服务器端。
# 这项配置可以节约带宽,因为对于NGINX已经缓存过的文件,服务器只会在该文件请求头中Last-Modified记录的时间内被修改时才将全部文件一起发送。
#proxy_cache_min_uses 设置了在NGINX缓存前,客户端请求一个条目的最短时间。当缓存不断被填满时,这项设置便十分有用,因为这确保了只有那些被经常访问的内容才会被添加到缓存中。该项默认值为1。
#proxy_cache_use_stale 当想访问介绍页面时,后端服务器timout或者error 5xx错误,如果有介绍页面的缓存信息,将会推送给客户端,而不是返回error。这样对信息做冗余,返回一个旧数据总比没有好。
#proxy_cache_lock 被启用时,当多个客户端请求一个缓存中不存在的文件(或称之为一个MISS),只有这些请求中的第一个被允许发送至服务器。当获得内容并缓存后,其他请求去访问缓存。如果不启用,则所有没找到缓存的请求都去找服务器,压力会大。
}
三.其它参数
忽略Cache-Control头部
location /images/ {
proxy_cache my_cache;
proxy_ignore_headers Cache-Control;
proxy_cache_valid any 30m;
...
}
#NGINX会忽略所有/images/下的Cache-Control头。proxy_cache_valid命令强制规定缓存数据的过期时间,如果忽略Cache-Control头,则该命令是十分必要的。NGINX不会缓存没有过期时间的文件。
缓存post请求
默认是缓存来自get的请求,例如浏览器访问百度,大部分就是get请求,登陆账号则是post。
proxy_cache_methods GET HEAD POST;
缓存动态内容
可以,提供的Cache-Control头部可以做到。缓存动态内容,甚至短时间内的内容可以减少在原始数据库和服务器中加载,可以提高第一个字节的到达时间,因为页面不需要对每个请求都生成一次。
使用Cookie作为缓存键的一部分
proxy_cache_key $proxy_host$request_uri$cookie_jessionid;
手动清理缓存
访问 curl http://127.0.0.1/tmp-test/TL39ef7ea6d8e8d48e87a30c43b8f75e30.txt
将清理其中一个缓存。这个缓存文件存在才行。
location /tmp-test/ {
allow 127.0.0.1; //只允许本机访问
deny all; //禁止其他所有ip
proxy_cache_purge tmp-test $uri; //清理缓存
#proxy_cache_purge:缓存清理模块
#tmp-test:指定的key_zone的名字
#$uri:指定的生成key的参数
}
支持断点续传
导致range参数无法传递到下一级的原因如下:
当缓存代理转发http请求到后端服务器时,http header会改变,header中的部分参数,会被取消掉。其中range参数被取消,导致,后端nginx服务器没有收到range参数,最终导致这个分片下载不成功。所以需要对代理转发的header进行配置。
将http请求中的range值($http_range)放到代理转发的http请求头中作为参数range的值。
#location字段添加
proxy_cache_key $http_range$uri;
<span style="color:#ff0000;">proxy_set_header Range $http_range;</span>
if ( $http_range = ''){
expires 30d;
}
#proxy_cache_key 默认是将$uri去hash后,作为缓存内容。但range是断点续传,url是一样的,会导致后续的访问还是从$uri缓存后的内容,所以要加一些东西区分一下。
#这样让缓存的东西唯一。
#<span> 将http请求中的range值($http_range)放到代理转发的http请求头中作为参数range的值。
#if那段写的是,当range(断点续传)为空,则让浏览器缓存,否则不缓存。因为断点续传的内容是不一样的,如果缓存了,那下载一个图片用断点续传,将会出现错误,显示的总是第一段。
设置查看缓存命中与否
#server字段
add_header Nginx-Cache "$upstream_cache_status";
Nginx配置缓存的更多相关文章
- Nginx配置缓存服务器
Nginx为静态资源配置缓存服务器对网站性能提供很可观. 1.配置 接下来我看如何配置: 我的环境是在同一台机器上配置了一个用openresty搭建的反向代理,上游服务器(后端服务器)是本机的ngin ...
- Nginx配置优化
Nginx优化: 并发优化 KeepAlive长连接 压缩优化 配置缓存 两个监控工具: nginx_status:并发统计 Ngxtop:请求统计 Nginx配置并发.长连接.压缩.状态监控: 关闭 ...
- Nginx配置ProxyCache缓存
利用nginx cache缓存网站数据 nginx本身就有缓存功能,能够缓存静态对象,比如图片.CSS.JS等内容直接缓存到本地,下次访问相同对象时,直接从缓存即可,无需访问后端静态服务器以及存储存储 ...
- 【Nginx】缓存配置
1.如何配置基本缓存设置 开启简单的缓存配置,只需要两个指令:proxy_cache_path和proxy_cache.proxy_cache_path配置缓存的存放地址和其他的一些常用配置,prox ...
- nginx配置代理缓存
nginx可以实现反向代理的配置,并且可以使用缓存来加速,本文是简单的实现功能的配置,暂时没有做其他的优化的部分的配置,从网上的资料来看,很多配置都是没有讲哪些是必须配置的,我自己在配置过程中就发现没 ...
- Nginx基础 - 配置缓存web服务
1.缓存配置语法 1)proxy_cache配置语法 Syntax: proxy_cache zone | off; Default: proxy_cache off; Context: http, ...
- nginx配置反向代理或跳转出现400问题处理记录
午休完上班后,同事说测试站点访问接口出现400 Bad Request Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...
- Nginx配置详解
序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HTTP服务器,也 ...
- Nginx配置性能优化
大多数的Nginx安装指南告诉你如下基础知识--通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了.而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能 ...
随机推荐
- Pycharm下载安装详细教程
目录 1.Pycharm 简介 2.Pycharm下载 3.环境变量的配置 4.Pycharm的使用 1.Pycharm 简介 PyCharm是一种Python IDE(Integrated Deve ...
- 微信小程序(九)
小程序运行环境与基本架构 每个小程序都是运行在它所在的微信客户端上的,通过微信客户端给它提供的运行环境,小程序可以直接获取微信客户端的原生体验和原生能力. wxml视图文件和wxss样式文件都是对渲染 ...
- LeetCode->链表反转
这是一个很基础的题目.今天处理了一下,不论是以双指针迭代.递归等方法,都能处理,但是也使这个题目更为典型. 剑指 Offer 24. 反转链表 - 力扣(LeetCode) (leetcode-cn. ...
- 【数据结构】【图文】【oj习题】 图的拓扑排序(邻接表)
拓扑排序: 按照有向图给出的次序关系,将图中顶点排成一个线性序列,对于有向图中没有限定次序关系的顶点,则可以人为加上任意的次序关系,由此所得顶点的线性序列称之为拓扑有序序列.显然对于有回路的有向图得不 ...
- [gym102832J]Abstract Painting
考虑每一个圆即对应于区间$[x_{i}-r_{i},x_{i}+r_{i}]$,可以看作对于每一个区间,要求所有右端点严格比其小的区间不严格包含左端点 用$f_{i}$表示仅考虑右端点不超过$i$的区 ...
- [loj3156]回家路线
令$dp[i]$表示经过第$i$条边后的最小烦躁值,有$且dp[i]=\min_{y_{j}=x_{i}且q_{j}\le p_{i}}dp[j]+f(p_{i}-q_{j})$,其中$f(x)=Ax ...
- SuperEdge再添国产智能加速卡支持,为边缘智能推理再提速10倍
作者 寒武纪AE团队,腾讯云容器中心边缘计算团队,SuperEdge 开发者 SuperEdge 支持国产智能加速卡寒武纪 MLU220 SuperEdge 对应的商业产品 TKE Edge 也一直在 ...
- .net core 和 WPF 开发升讯威在线客服系统:使用本地IP数据库实现访客来源快速定位,支持国外
本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程.本产品已经成熟稳定并投入商用. 免费使用 & 私有化部署:https://kf.shengxun ...
- Spring Cloud Gateway过滤器精确控制异常返回(实战,完全定制返回body)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 Spring Cloud Gateway应用 ...
- 统计学习2:线性可分支持向量机(Scipy实现)
1. 模型 1.1 超平面 我们称下面形式的集合为超平面 \[\begin{aligned} \{ \bm{x} | \bm{a}^{T} \bm{x} - b = 0 \} \end{aligned ...