详解ngx_cache_purge _proxy_cache指令使用

目录
  • 1. proxy_cache 指令
  • 2. proxy_cache_bypass指令
  • 3. proxy_cache_key指令
  • 4. proxy_cache_lock指令
  • 5. proxy_cache_lock_timeout指令
  • 6. proxy_cache_min_uses指令
  • 7. proxy_cache_path指令
  • 8. proxy_cache_use_stale指令
  • 9. proxy_cache_valid指令
  • 10. proxy_no_cache
  • 11. proxy_store 指令
  • 12. proxy_store_access指令

1. proxy_cache 指令

该指令用于配置一块公用的内存区域的名称,该区域可以存放缓存的索引数据。这些数据在Nginx服务器启动时由缓存索引重建进程负责建立,在Nginx服务器的整个运行过程中由缓存管理进程负责定时检测过期数据,检索等管理工作。

proxy_cache zone | off;
zone,设置的用于存放缓存索引的内存区域的名称。
off,关闭proxy_cache 功能,是默认的设置。

2. proxy_cache_bypass指令

该指令用于配置Nginx服务器向客户端发送响应数据时,不从缓存中获取的条件。这些条件支持使用Nginx 配置的常用变量。

proxy_cache_bypass string …;
string为条件变量,支持设置多个,当至少有一个字符串指令不为空或者不等于О时,响应数据不从缓存中获取。
看一个例子: proxy_cache _bypass $cookie_nocache $arg nocache $Sarg_comment

$http_pragma $http.authorization;
其中,Scookie_nocache、Sarg_nocache、Sarg_comment、Shttp_pragma
和Shttp_authorization 都是Nginx配置文件的变量,

3. proxy_cache_key指令

该指令用于设置Nginx服务器在内存中为缓存数据建立索引时使用的关键字

proxy cache key string;
string为设置的关键字,支持变量。

如果我们希望缓存数据包含服务器主机名称等关键字,则可以将该指令设置为:
proxy_cache_key “s c h e m e schemeschemehost$request”;

4. proxy_cache_lock指令

该指令用于设置是否开启缓存的锁功能。在缓存中,某些数据项可以同时被多个请求返回的响应数据填充。开启该功能后,Nginx服务器同时只能有一个请求填充缓存中的某一数据项,这相当于给该数据项上锁,不允许其他请求操作。其他的请求如果也想填充该项,必须等待该数据项的锁被释放。这个等待时间由
proxy_cache_lock_timeout 指令配置。

proxy_cache_lock on | off;
默认情况下为关闭

5. proxy_cache_lock_timeout指令

该指令用于设置缓存的锁功能开启以后锁的超时时间。具体细节参见proxy_cache_lock 指令的相关内容

proxy cache_ lock_timeout time;
其中,time为设置的时间,默认为5s。

6. proxy_cache_min_uses指令

该指令用于设置客户端请求发送的次数,当客户端向被代理服务器发送相同请求达到该指令设定的次数后,Nginx服务器才对该请求的响应数据做缓存。合理设置该值可以有效地降低硬盘上缓存数据的数量,并提高缓存的命中率。

proxy_cache_min_uses number;
其中,number为设置的次数。默认设置为1。

7. proxy_cache_path指令

该指令用于设置Nginx服务器存储缓存数据的路径以及和缓存索引相关的内容

proxy_cache_path [levels=levels] keys_zone=name:sizel [inactive=time1] [max_size=size2][loader_files=number] [loader_sleep=time2][loader_threshold-time3];
  • path,设置缓存数据存放的根路径,该路径应该是预先存在于磁盘上的。levels,设置在相对于path指定目录的第几级hash目录中缓存数据。
  • levels=1:表示一级hash目录;levels=1:2,表示两级,依次类推。目录的名称是基于请求URL通过哈希算法获取到的。
  • name:sizel,Nginx服务器的缓存索引重建进程在内存中为缓存数据建立索引,这一对变量用来设置存放缓存索引的内存区域的名称和大小。
  • timel,设置强制更新缓存数据的时间,当硬盘上的缓存数据在设定的时间内没有被访问时,Nginx服务器就强制从硬盘上将其删除,下次客户端访问该数据时重新缓存。该指令默认设置为10s。
  • size2、设置硬盘中缓存数据的大小限制。我们知道,硬盘中的缓存源数据由Nginx服务器的缓存管理进程进行管理,当缓存的大小超过该变量的设置时,缓存管理进程将根据最近最少被访问的策略删除缓存。
  • number,设置缓存索引重建进程每次加载的数据元素的数量上限。在重建缓存索引的过程中,进程通过一系列的递归遍历读取硬盘上的缓存数据目录及缓存数据文件,对每个数据文件中的缓存数据在内存中建立对应的索引,我们称每建立一个索引为加载一个数据元素。进程在每次遍历过程中可以同时加载多个数据元素,该值限制了每次遍历中同时加载的数据元素的数量。默认设置为100。
  • time2,设置缓存索引重建进程在一次遍历结束、下次遍历开始之间的暂停时长。默认设置为50ms.
  • time3,设置遍历一次磁盘缓存源数据的时间上限。默认设置为200ms

该指令设置比较复杂,一般需要设置前面三个指令的情形比较多,后面的几个变量与Nginx服务器缓存索引重建进程及管理进程的性能相关,一般情况下保持默认设置就可以了。我们来看几个简单的配置实例:

proxy_cache path /nginx/cache/a levels=1 keys_zone=a:10m;
proxy_cache_path /nginx/cache /b levels-2:2 keys_zone=b:100m;
proxy _cache_path /nginx/cache/c levels=1:1:2 keys_zone=c:1000m;

8. proxy_cache_use_stale指令

如果Nginx在访问被代理服务器过程中出现被代理的服务器无法访问或者访问错误等现象时,Nginx服务器可以使用历史缓存响应客户端的请求,这些数据不一定和被代理服务器上最新的数据相一致,但对于更新频率不高的后端服务器来说,Nginx服务器的该功能在一定程度上能够为客户端提供不间断访问。该指令用来设置一些状态,当后端被代理的服务器处于这些状态时,Nginx服务器启用该功能。

该指令可以支持的状态如语法结构中所示。

proxy_cache_use_stale error| timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_404 | off..·:

9. proxy_cache_valid指令

该指令可以针对不同的HTTP响应状态设置不同的缓存时间

proxy_cache_valid [code…] time;

  • code,设置HTTP响应的状态代码。该指令可选,如果不设置,Nginx服务器只为HTTP状态代码为200、301和302的响应数据做缓存。可以使用“any”表示缓存所有该指令中未设置的其他响应数据。
  • time,设置缓存时间。看几个例子:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;

上述例子中,对返回状态为200和302的响应数据缓存10分钟,对返回状态为301的响应数据缓存1小时,对返回状态为非200、302和301的响应数据缓存1分钟。

10. proxy_no_cache

该指令同于配置在什么情况下不使用cache功能

proxy_no_cache $string…;
string 可以是一个或者都多个变量。当string的值不为空或者不为0时,不启用cache功能

11. proxy_store 指令

该指令配置是否在本地磁盘缓存来自被代理服务器的响应数据。这是Nginx服务器提供的另一种缓存数据的方法,但是该功能相对 Proxy
Cache简单一些,它不提供缓存过期更新、内存索引建立等功能,不占用内存空间,对静态数据的效果比较好。

proxy_store on | off | string;

  • on | off,设置是否开启ProxyStore功能。如果使用变量on,功能开启,缓存文件会存放到alias指令或root指令设置的本地路径下。默认设置为off。
  • string,自定义缓存文件的存放路径。如果使用变量string,Proxy Store功能开启,缓存文件会存放到指定的本地路径下。

Proxy Store方法多使用在被代理服务器端发生错误的情况下,用来缓存被代理服务器的响应数据。

12. proxy_store_access指令

该指令用于设置用户或用户组对Proxy Store缓存的数据的访问权限

proxy_store_access users:permissions …

  • users,可以设置为user、group或者all。
  • permissions,设置权限。

有关Proxy Store方法的使用,我们通过官方给出的实例加深理解,在该实例中笔者通过注释对配置做了说明:

location /images/
{
  root /data/www;
  error_page 404 = /fetch$uri;      #定义了404错误的请求页面
}

location /fetch/                    #匹配404错误时的请求
{
  proxy_pass http://backend;
  proxy_store on;                   #开启Proxy store方法
  proxy_store_access user:rw group:rw all:r;
  root/data/www;                    #缓存数据的路径
}

到此这篇关于详解ngx_cache_purge _proxy_cache指令使用的文章就介绍到这了,更多相关ngx_cache_purge _proxy_cache指令内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Nginx反向代理proxy_cache_path directive is not allowed错误解决方法

    尝试使用Nginx进行反向代理过程中出现如下错误: 复制代码 代码如下: nginx: [emerg] "proxy_cache_path" directive is not allowed here in /etc/nginx/conf.d/default.conf:29 提示意思"proxy_cache_path指令不被允许",在官网上查找了相关说明,也没有发现问题,最后看应用范围才知道,他只能使用于http{  }部分,把proxy_cache_path放置于

  • Nginx启用proxy_cache缓存的方法

    顾名思义,proxy_cache 是用于 proxy 模式(一般也可称为反代)的缓存功能.本文介绍其基本用法. proxy_cache 在 Nginx 配置的 http 段.server 段(location 段)中分别写入不同的配置.http 段中的配置用于定义 proxy_cache 空间,server 段中的配置用于调用 http 段中的定义,启用对 server 的缓存功能. http 段 直接以本站的配置为例: proxy_cache_path /home/nginx/proxy_ca

  • 使用Nginx反向代理与proxy_cache缓存搭建CDN服务器的配置方法

    碰到问题:移动用户访问web服务器www.osyunwei.com很慢解决办法:1.在移动机房放置一台nginx反向代理服务器2.通过域名DNS智能解析,所有移动用户访问www.osyunwei.com时解析到nginx反向代理服务器3.nginx反向代理服务器与web服务器之间采用专线连接说明:1.web服务器线路:电信IP:192.168.21.129域名:www.osyunwei.com2.nginx反向代理服务器线路:移动系统:CentOS 6.2IP:192.168.21.164vi

  • nginx proxy_cache 缓存配置详解

    前言: 由于本人工作原因,涉及到网络直播领域,其中视频的回放下载,涉及到了一些视频下载方面的技术.针对于一个完整视频的下载,目前市面上的主流做法是,先将整个视频流切片,存储到文件服务器中,在用户需要观看回放视频时.通过一个视频回源服务器,去文件服务器中逐个请求切片,返回给用户播放. 今天着重探讨的是关于回源服务器缓存的配置以及合理的缓存策略. 通过给回源服务器配置缓存的案例,详细讲解一整套缓存配置机制,并且可沿用到其他任何缓存配置场景中. 今天的讲解分为四点: 回源服务器的工作是啥为啥 需要给回

  • nginx proxy_cache批量清除缓存的脚本介绍

    前言:之前使用官方的nginx proxy_cache作为CDN静态缓存发现该模块清理缓存是一个大问题,只能一条一条url的清除,为此写了一个批量清除缓存的脚本 主要功能包括: 1.按文件类型清理 2.按具体的文件名清理 3.按网站目录清理 下面是bash shell脚本代码,之前网上也好好多类似的脚本但是感觉都不太好还容易误导人犯错误 #!/bin/bash #Email:hello_linux@aliyun.com #Auto Clean Nginx Proxy_Cache Shell Sc

  • 详解ngx_cache_purge _proxy_cache指令使用

    目录 1. proxy_cache 指令 2. proxy_cache_bypass指令 3. proxy_cache_key指令 4. proxy_cache_lock指令 5. proxy_cache_lock_timeout指令 6. proxy_cache_min_uses指令 7. proxy_cache_path指令 8. proxy_cache_use_stale指令 9. proxy_cache_valid指令 10. proxy_no_cache 11. proxy_store

  • 详解汇编语言各种指令的解释与用法

    [数据传输指令] 一.通用数据传送指令 1.传送指令MOV(move) 指令的汇编格式:MOV DST,SRC 指令的基本功能:(DST)<-(SRC) 将原操作数(字节或字)传送到目的地址.指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令.指令的执行对标志位的影响:不影响标志位.指令的特殊要求:目的操作数DST和源操作数SRC不允许同时为段寄存器:目的操作数DST不能是CS,也不能用立即数方式. 2.进栈指令 PUSH(push onto the sta

  • 详解MySQL kill 指令的执行原理

    kill 指令有两种写法 " kill query + 线程 id "." kill connection(可缺省) + 线程 id ".分别表示关闭指定线程正在执行的语句.断开指定线程连接的客户端(如果有正在执行的操作会先停止执行的操作再关闭连接).但某些情况下使用 kill query 后使用 show processlist 查看 Command 列为 killed(表示 正在等待回收线程回收,还未回收),这是为什么呢? 在解答这个问题前,需要知道服务器端处理

  • 详解Vue自定义指令及使用

    一.什么是指令 学习 vue 的时候肯定会接触指令,那么什么是指令呢? 在 vue 中提供了一些对于页面和数据更为方便的输出,这些操作就叫做指令,以 v-xxx 表示,比如 html 页面中的属性 <div v-xxx ></div> 比如在 angular 中 以 ng-xxx 开头的就叫做指令 指令中封装了一些 DOM 行为,结合属性作为一个暗号,暗号有对应的值,根据不同的值,会进行相关 DOM 操作的绑定,即可以进行一些模板的操作 vue 中常用的一些内置 v- 指令 v-t

  • 详解nginx location指令

    location 介绍 location是Nginx中的块级指令(block directive),,location指令的功能是用来匹配不同的url请求,进而对请求做不同的处理和响应,这其中较难理解的是多个location的匹配顺序,本文会作为重点来解释和说明. 开始之前先明确一些约定,我们输入的网址叫做请求URI,nginx用请求URI与location中配置的URI做匹配. Nginx的HTTP配置主要包括三个区块,结构如下: http { //这个是协议级别 include mime.t

  • 详解angularJS自定义指令间的相互交互

    AngularJS 自定义指令 transclude:当元素标签需要嵌套时使用,与ng-transclude配合使用.默认值为false不能使用嵌套,true为可以使用嵌套.在哪个标签上使用ng-transclude就在哪个标签内进行嵌套. 代码示例:(将hello.hi标签进行替换同时span标签嵌套div内) <script type="text/javascript"> var m = angular.module('myApp',[]); m.directive('

  • 详解Angular.js指令中scope类型的几种特殊情况

    前言 大家都知道在默认情况下,指令应该访问父作用域.如果我们对指令暴露了父控制器的scope,那么指令就可以自由的修改scope属性.在一些情况下,你的指令可能想要添加一些只有内部可以使用的属性和函数,如果我们都在父作用域中完成,可能会污染了父作用域,因此,我们有以下两种选择: 使用父作用域-如果不需要操作父作用域属性,不需要一个新的作用域,可以直接使用父作用域 scope:false 一个子作用域-这个作用域会原型继承父作用域 scope:true 一个隔离的作用域-一个全新的.不继承.独立存

  • 详解Angularjs 自定义指令中的数据绑定

    有关自定义指令的scope参数,网上很多文章都在讲这3种绑定方式实现的效果是什么,但几乎没有人讲到底怎么使用,本篇希望聊聊 到底怎么用 这个话题. 一. 自定义指令 自定义指令,是 Angularjs 用来实现组件化的方式,相比于 React 和 Vue 的组件化方式,它真的很复杂,自定义指令太重了,它暴露了太多可供定制的参数,以至于普通的开发者完全不知道要用它来做什么而将其束之高阁,毕竟一般的业务逻辑通过controller和service就已经可以完成了. 自定义指令在 Angularjs

  • 详解汇编语言MOV指令

    在汇编语言中,MOV指令是数据传送指令,也是最基本的编程指令,用于将一个数据从源地址传送到目标地址(寄存器间的数据传送本质上也是一样的). 32位指令集 1.一般传送指令 MOV指令: 格式: MOV目的-->除CS.IP以外的寄存器或存储器 源-->寄存器.存储器.立即数 ex : MOV  ECX ,EDX ;   EDX->ECX ECX =00000034H EDX =00000052H 指令执行结果: ECX = 00000052H, EDX不变,标志寄存器也不变. MOVSX

  • 详解angularjs 学习之 scope作用域

    简介 Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个存储应用数据模型的对象,有可用的方法和属性. Scope 可应用在视图和控制器上. 作用域是Web应用的控制器和视图之间的粘结剂: 控制器 --> 作用域 --> 视图(DOM) 指令 --> 作用域 --> 视图(DOM) 当你在 AngularJS 创建控制器时,你可以将 $scope 对象当作一个参数传递: <div ng-controller=

随机推荐