缓存配置

对于一个含有大量内容的网站来说,随着访问量的增多,对于经常被用户访问的内容,若每一次都要到后端服务器中获取,会给服务器造成很大的压力。为此,利用反向代理服务器对访问频率较多的内容进行缓存,有利于节省后端服务器的资源。Nginx 提供了两种Web缓存方式,一种是永久性缓存,另一种是临时性缓存。

缓存实现原理

Web缓存服务器位于内容源Web服务器和客户端之间,当客户端用户访问一个URL时,Web缓存服务器就会请求相应的内容源Web服务器,并将响应的信息缓存至内存或磁盘;然后,当下一个请求到来时,如果访问的是相同的URL, Web缓存服务器会直接将已缓存的内容输出给客户端,而不用再次向内容源Web服务器发送请求。

利用缓存服务器,可以有效降低内容源服务器和数据库的负载,提高用户访问的响应速度:

当用户向Web缓存服务器中发送请求时,缓存服务器要检查一下当前URL请示是否已经存在缓存,若存在则直接返回给用户。否则,向内容源Web服务器发送请求,获取响应结果,将其缓存并返回给发送请求的客户端。

永久缓存配置

Nginx提供的proxy_store指令可以用于将内容源服务器响应的内容缓存到本地,若不手动删除,该缓存文件会一直生效。因此,永久缓存方式适用于缓存网站中几乎不会更改的一些内容。

准备服务器:

Nginx使用80端口反向代理Tomcat8080端口。

缓存配置:

server {listen 80;server_name localhost;location / {root cache;proxy_store on;proxy_store_access user:rw group:rw all:r;proxy_temp_path cache_tmp;proxy_pass http://localhost:8080;}
}

上述第5行配置,用于指定缓存文件的保存目录,这里将其设定在Nginx安装目录下的cache目录中,需要用户手动创建,创建后修改此目录的用户权限,要求与Nginx工作进.程的用户相同(如nobody)。第6行用于开启本地缓存,第7行设置缓存的读写规则,第8行设置反向代理时接收的数据临时存储文件的目录,该目录会由Nginx在配置生效后自动创建。

需要注意的是,上述配置虽然能够将文件缓存在本地,但是客户端每次请求时,Nginx仍然会向后端服务器获取文件。为了避免这种情况的发生,需要先判断缓存文件是否存在,具体配置如下:

#利用正则表达式匹配缓存目录中的文件、目录或符号链接是否存在
if (!-e $request_filename){proxy_pass http://localhost:8080;
}#注意:if和(之间有一个空格!!!!

上述配置中,!-e表示检查一个文件、目录或符号链接是否存在,当不存在时就执行{}中的指令。其中,内置变量$request filename表示当前请求的文件路径或URI。例如,当客户端向Web缓存服务器发送http://192. 168. 78.3/test/index. html请求时,变量$request_filename的值为/test/index.html,如果缓存目录cache中没有用户请求的缓存文件,Nginx会到后端服务器http://192. 168. 78. 128/test/index. html中请求,然后将响应结果进行缓存。

验证测试:

在tomcat下的webapp目录下新建edu目录,新建一个a.html文件:

<h1>tomcat9 8080</h1>

访问:http://localhost/edu/a.html

进入cache目录查看缓存命中结果:

临时缓存配置

Nginx服务器中,还有一种使用proxy_cache指令设置的临时缓存配置,它采用md5算法将请求链接进行哈希(hash)后,根据具体配置生成缓存文件目录,保存响应的数据。

缓存配置:

#代理临时目录
proxy_temp_path /usr/local/nginx/proxy_tmp_dir;
#web缓存目录和参数设置
proxy_cache_path /usr/local/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=1m max_size=500m;

上述第2行指令,用于设置缓存服务器(192.168.78.3)接收内容源服务器响应内容时使用的临时目录。第4行指令,用于设置缓存目录。其中,proxy_ cache_ path 指令相关参数的含义如下。

  • /usr/local/nginx/proxy_cache_ dir参数:表示用户自定义的缓存文件保存目录。
  • levels参数:表示缓存目录下的层级目录结构,它是根据哈希后的请求URL地址创建的,目录名称从哈希后的字符串结尾处开始截取。
    假设哈希后的请求链接地址为af7098a15e430326197 ee01516fdace0,则levels= 1:2表示,第1层子目录的名称是长度为1的字符0,第2层子目录的名称是长度为2的字符 ce。
  • keys_ zone参数:指定缓存区名称及大小,例如,cache_one:50m表示缓存区名称为cache_ one, 在内存中的空间是50MB。
  • inactive 参数:表示主动清空在指定时间内未被访问的缓存。例如,1m清空在1分钟内被访问过的缓存,1h标识1小时,1d标识1天等。
  • max_size参数:标识指定磁盘空间代销。例如,500m、10g。

需要注意的是,Nginx在进行缓存时,首先会被写人proxy_ temp_ path 指定的临时目录中,因此建议proxy_ cache_ path 和proxy_ temp_ path 指令设置的目录应在同一个文件系统中,避免不同文件系统之间的磁盘I/O消耗。

在server块中添加临时缓存的相关配置:

server {listen 80;server_name localhost;#增加两个响应头信息,用于获知访问的服务器地址与缓存是否成功add_header X-Via $server_addr;add_header X-Cache $upstream_cache_status;location / {#设置缓存区域名称proxy_cache cache_one;#以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希proxy_cache_key $host$uri$is_args$args;#对不同的HTTP状态码设置不同的缓存时间proxy_cache_valid 200 10m; #200缓存10分钟proxy_cache_calid 304 1m;  #304缓存1分钟proxy_cache_calid 301 302 1h; #301、302缓存1小时proxy_cache_valid any 1m; #其他未设置的状态码缓存1分钟#设置反向代理proxy_pass http://localhost:8080;}
}

上述第9行,用于设置缓存区域名称;第11行用于设置hash的Key值组成规则,在省略的情况下,Nginx将使用默认的Key值组成规则。第13~16行设置,通过proxy_ cache_valid指令对不同的HTTP状态码设置不同的缓存时间,该指令的第1个参数表示状态码,第2个参数表示缓存时间。
关于proxy_cache_key指令参数中使用的具体内置变量的说明如下:

  • $host:服务器的域名,如 test. ng. test。
  • $uri:域名和参数之间的部分,如/index.html。
  • $is_ args:有URL参数时,则值为?,否则为空字符串。
  • $args: 保存URL参数,如a=1&b=2,没有参数时为空字符串。
  • 利用$is_ _args和$args,可以实现根据不同URL参数缓存不同文件。

为了便于在浏览器端查看是否正确缓存,第5~6行配置通过add_ header 指令添加了两个响应消息头。其中X-Via表示服务器地址,利用内置变量$server_addr 获取,另一个X-Cache表示资源缓存状态,利用内置变量$upstream_ cache_ status获取。$upstream_cache_ status的返回值有7个,如表:

需要注意的是,对于用户的请求,仅在处理成功的情况下,才会在浏览器的ResponseHeaders中查看到add_header指令设置的响应消息头。

常用缓存配置指令:

Nginx——缓存配置相关推荐

  1. nginx默认html缓存,nginx缓存配置

    今天试了一下nginx缓存配置,说到缓存相信大家应该都不陌生,也就是把访问后端web服务器的静态请求缓存到本地文件系统一个目录,后端一般是apache服务器居多!当前这两台机器完全可以在一台服务器上, ...

  2. React 前端 Nginx 缓存配置

    React 前端 Nginx 缓存配置 最新开发钉钉微应用,上线后发现 2 个问题: 1.每次更新后,需要用户手动刷新获取最新的 HTML 和最新的 js,经常被客户吐槽为什么 bug 还没改,其实早 ...

  3. nginx缓存配置及开启gzip压缩

    一:nginx缓存配置 在前一篇文章,我们理解过http缓存相关的知识点, 请看这篇文章. 今天我们来学习下使用nginx服务来配置缓存的相关的知识. nginx配置缓存的优点:可以在一定程度上,减少 ...

  4. nginx 缓存配置及报错解决

    研究了2天的nginx缓存 出现各种报错 我把配置文件修改过后还是报错 1 2 3 4 5 6 7 location ~ /purge(/.*)                 {           ...

  5. ASP.NET Core 缓存技术 及 Nginx 缓存配置

    前言 在Asp.Net Core Nginx部署一文中,主要是讲述的如何利用Nginx来实现应用程序的部署,使用Nginx来部署主要有两大好处,第一是利用Nginx的负载均衡功能,第二是使用Nginx ...

  6. Nginx缓存配置(简易实现CDN功能)

    环境推荐使用openresty,自带了挺多模块的,如果直接使用nginx,需要对缺少的模块进行添加,添加教程参照百度或者OpenResty教程 1.本地站点ETag缓存 示范开启静态文件缓存 环境: ...

  7. nginx 缓存配置详解都是干货

    一.缓存类型 1.服务端缓存 2.代理缓存 3.客户端缓存 4.代理缓存的工作流程: 二.代理缓存配置语法 1.代理缓存路径 配置语法 Syntax: proxy_cache_path path [l ...

  8. Nginx缓存配置教程

    问题引出 假设某电商平台商品详情页需要实现 700 QPS(假设宽带是千兆宽带) 千M局域网宽带网卡速率按照1000进位,所以1Gbps=1,000,000,000bps=125,000,000Bps ...

  9. 性能测试中间件Nginx缓存配置

    缓存配置 在解决高并发性能问题时,缓存是其中的一种手段.本文简单介绍nginx缓存的配置方法,详细可以参考nginx官方文档 我的nginx配置如下 # 设置缓存内容 proxy_cache_path ...

最新文章

  1. C++ Primer 5th笔记(chap 18 大型程序工具)虚继承
  2. tp5中在where中使用in
  3. JUC锁-CyclicBarrier(七)
  4. easyexcel获取所有sheet页名称_老板让我汇总多个sheet,我不会,同事却说使用PQ仅需2步搞定...
  5. 【题解】【数组】【Prefix Sums】【Codility】Genomic Range Query
  6. 10分钟读懂人工智能、机器学习到底有什么关系
  7. Facebook提出生成式实体链接、文档检索,大幅刷新SOTA!
  8. 【华为云技术分享】从 Cloud 1.0 到 2.0,云计算的“多元架构命题”
  9. css 横线_web前端入门到实战:CSS 搞怪的 text-decoration
  10. LVM原理、创建、扩容、缩减、快照详解
  11. 【博客话题】接触Linux 11年
  12. zookeeper 进入客户端_探究—Zookeeper的启动过程
  13. ijkplayer 录像 截图功能,支持rtsp rtmp http 流媒体
  14. 腿抖在饮食上需要注意什么?
  15. nvm的安装配置教程
  16. 数据库表的字段常用数据类型
  17. 奇迹gm工具 奇迹批量远程工具
  18. WPF.UIShell UIFramework之自定义窗口的深度技术
  19. 2023年1月12日,openKylin 0.9.5正式发布!
  20. 致电商小白:电商数据分析,你真的会吗?

热门文章

  1. 【C++】迷宫的简单实现
  2. 使用CDS view进行S4HANA的OData开发
  3. 计算机开机没反应怎么办,电脑开机没反应怎么办 开机没反应解决方法推荐
  4. 闭区间上的连续函数必定是一致连续的
  5. 不良资产案件执行难的原因
  6. 一枝独秀 BugkuCTF-杂项-MISC
  7. 大数据2--hive--hive介绍
  8. 中心极限与大数定理律的关系_麦克斯韦速度分布律与气体分子碰壁数的推导
  9. 几种常用方法教你解决QQ空间无法打开问题
  10. list容器下的 emplace_front() splice() 函数