web缓存之nginx缓存

 一、nginx缓存知识

        网络缓存位于客户端和 "源服务器 "之间,保存着所有可见内容的副本。当客户端请求缓存中存储的内容时,它可以直接从缓存中检索内容,而无需与服务器通信。这样,网络缓存就 "接近 "了客户端,提高了响应性能,并更有效地利用了应用服务器,使其不必为每个请求生成页面。

        在浏览器和应用服务器之间有多种 "潜在 "缓存,包括客户端浏览器缓存、中间缓存、内容交付网络(CDN)、负载均衡和服务器上的反向代理。缓存,即使只是在反向代理和负载平衡的层面上,对于提高性能也是非常有用的。

        举个例子来说明,去年我为一个加载缓慢的网站进行了性能优化。我注意到的第一件事是,主页的生成时间几乎长达一秒或更长。经过一番调试,我发现加载速度慢的原因是网页被标记为非缓存,这意味着每次请求都会动态生成。这其实没有必要,因为网页本身不需要经常更改,也不需要个性化。为了验证我的结论,我将页面标记为每五秒钟缓存一次。第一个字节到达的时间缩短到几毫秒,页面加载速度明显加快。

        除了大型内容交付网络(CDN),缓存还能提高负载平衡器、反向代理和应用服务器前端网络服务的性能。从上面的例子中可以看出,缓存内容可以更有效地利用应用服务器,因为页面生成过程无需每次重复。此外,网络缓存还可用于提高网站的可靠性。如果服务器宕机或繁忙,可以对 NGINX 进行设置,将缓存内容发送给用户,而不是向用户返回错误信息。这就意味着,如果应用服务器或数据库出现故障,网站的部分或全部功能仍能保持。

二、设置nginx缓存

nginx源站点服务器设置

 

缓存服务器设置

proxy_cache_path /data/nginx/cache levels=1 keys_zone=my_cache:10m max_size=10g inactive=3m use_temp_path=off;●path:强制参数,指定缓存文件的存放路径。
●levels:定义了缓存目录的层级。每层可以用1(最多16种选择,0-f)或2(最多256种选择,00-ff)表示,中间用 : 分隔。
proxy_cache_path /data/nginx/cache;  代表所有缓存只有一个目录,比如/data/nginx/cache/d7b6e5978e3f042f52e875005925e51b
proxy_cache_path /data/nginx/cache levels=1:2;  代表缓存是二层目录(有16*256=4096个目录),比如/data/nginx/cache/b/51/d7b6e5978e3f042f52e875005925e51b
●keys_zone:强制参数,定义共享内存区的名称和大小,该共享内存用于保存缓存项目的元数据(所有活动的key和缓存数据相关的信息),这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key。
●inactive:删除指定时间内未被访问的缓存文件,默认10分钟。
●max_size:设置了缓存存储的上限,如果不指定,最大会用掉所有磁盘空间。
●use_temp_path:直接把临时文件放在缓存目录中。

location / {root   /usr/share/nginx/html;index  index.html index.htm;proxy_cache my_cache;      #指定用于页面缓存的共享内存,zone名称由proxy_cache_path指令定义proxy_cache_valid 200 3m;  #为不同的响应状态码设置不同的缓存时间,此为缓存状态码为200的请求,缓存时长为3分钟proxy_cache_key $request_uri; #指定缓存文件的key为请求的URIadd_header Nginx-Cache-Status $upstream_cache_status;  #把缓存状态设置为头部信息,响应给客户端proxy_pass http://webservers;  #设置代理转发的后端服务器的协议和地址}

测试 

 

 

三、补充知识

CDN 内容分发网络
在最接近用户的网络“边缘”增加一层CDN缓存代理服务器,将源站点的内容发布CDN节点,可以使用户就近取得所需的内容,提高用户访问网站的响应速度。

CDN工作原理:将源站点(Web应用服务器)的静态网页资源缓存到CDN节点上,用户请求资源时,通过与DNS的配合,找到最靠近用户的一台CDN缓存服务器,然后把资源数据快速地分发给用户,而不需要每个用户的请求都从源站点获取,从而避免网络拥塞、缓解源站点的压力,保证用户访问资源的速度和体验。

CDN的内容是如何获取的?
1)对于热点资源,定时做缓存预热
2)如果CDN节点没有,会从上游服务器或源站点获取资源,并同步到CDN节点的缓存中    

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/338405.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea git回滚之前提交记录

提交代码时,如果不小心提交了不需要提交的内容,在本地仓库中,此时需要回滚版本,如何回滚 1.打开git控制台,左下角git,选择要处理的分支,选择刷新获取最新git提交记录 2)选中自己commit需要回滚…

软件测试|详解 Pytest 参数化:简化测试用例的编写

简介 Pytest 是一个广泛使用的 Python 测试框架,它提供了丰富的功能来编写和执行测试用例。其中一个强大的特性是参数化,它允许我们通过一种简洁的方式运行多个输入参数的相似测试用例,从而减少冗余的代码。本文将详细介绍 Pytest 的参数化功…

臻牧签约实在RPA,数据流通效率飙升!

臻牧是一家集研发、生产、销售、服务于一体的综合型公司,十年行业领跑,由“国民好演员”海清担任品牌代言人。陕西自有13000平米省级示范乳品工厂,牵手西交大成立小分子羊奶粉研究中心,每年千万投入持续攻坚科研,全线支…

Unicode编码:打破语言壁垒,实现无缝交流

Unicode编码是一种用于表示文本字符的编码系统,它旨在解决不同字符集之间相互兼容的问题,使各种语言和文化得以在数字世界中无缝交流。本文将从多个方面介绍Unicode编码的概念、原理及其在现实中的应用,为您揭示这个神秘编码背后的故事。 Un…

多个显示设备接入卡开机Logo问题分析报告

1 关键字 显示设备;HDMI;开机Logo; 2 问题描述 问题环境: 系统版本:OpenHarmony-3.2-Release 问题现象: 插入外接显示器,启动系统偶现卡开机Logo。 3 问题原因 3.1 正常机制 系统启动成…

汽车IVI中控开发入门及进阶(十二):手机投屏

前言: 汽车座舱有车载中控大屏、仪表/HUD多屏的显示能力,有麦克风/喇叭等车载环境更好的音频输入输出能力,有方控按键、旋钮等方便的反向控制输入能力,还有高精度的车辆数据等。但汽车座舱中控主机硬件计算能力升级迭代周期相对较长,汽车的应用和服务不够丰富。现在很多汽…

跟我学java|Stream流式编程——Stream 的终端操作

orEach 和 peek forEach和peek都是Stream API中用于遍历流中元素的操作方法,它们在处理流的过程中提供了不同的功能和使用场景。 forEach:forEach是一个终端操作方法,它接受一个Consumer函数作为参数,对流中的每个元素执行该函数…

电脑找不到d3dcompiler43.dll怎么修复,教你5个可靠的方法

d3dcompiler43.dll是Windows操作系统中的一个重要动态链接库文件,主要负责Direct3D编译器的相关功能。如果“d3dcompiler43.dll丢失”通常会导致游戏无法正常运行或者程序崩溃。为了解决这个问题,我整理了以下五个解决方法,希望能帮助到遇到相…

软件系统测试怎么进行?对软件产品起到什么作用?

软件系统测试是指通过测试软件的安装、配置、集成和功能等多个方面,以验证系统是否符合预期需求并达到预期目标的过程。在测试过程中,我们会通过数据输入、操作触发、接口调用、异常处理等手段对软件系统进行全面检测。 一、软件系统测试的进行步骤   …

Prometheus监控遇上报错invalid is not a valid start token

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 问题描述: 使用prometheus采集java应用的metric指标数据,在prometheus界面pod状态为down,报…

python爬取诗词名句网-三国演义,涉及知识点:xpath,requests,自动识别编码,range

页面源代码: <!DOCTYPE html> <html lang="zh"> <head><script src="https://img.shicimingju.com/newpage/js/all.js"></script><meta charset="UTF-8"><title>《三国演义》全集在线阅读_史书典籍_…

monocle2 fibroblast silicosis inmt

gc() #####安装archr包##别处复制 .libPaths(c("/home/data/t040413/R/x86_64-pc-linux-gnu-library/4.2","/home/data/t040413/R/yll/usr/local/lib/R/site-library", "/usr/local/lib/R/library","/home/data/refdir/Rlib/")).libPa…