Nginx实现页面缓存

【Agent从入门到实践】40 容错优化:异常处理、重试机制、降级策略 各位小伙伴,咱们的多Agent框架一路优化到现在,决策快、执行效率高、资源用得省,看似啥都行,但只要一遇到网络波动、工具故障、数据异常调用web_search工具时网络超时,整个检索任务直接失败,写作Agent没数据可用向量库连接异常,向量检索直接崩掉,依赖检索结果的Agent全趴窝单个Agent执行出错,整个并行任务流程直接中断,前功尽弃高并发下部分工具调用失败,框架没有备用方案,只能返回任务失败说白了,咱们之前的框架只有正常执行逻辑,没有异常兜底逻辑。 阅读详情

第一步:添加nginx.conf的http级别的缓存配置

    ##cache##
    proxy_connect_timeout 500;
    #跟后端服务器连接的超时时间_发起握手等候响应超时时间
    proxy_read_timeout 600;
    #连接成功后_等候后端服务器响应的时间_其实已经进入后端的排队之中等候处理
    proxy_send_timeout 500;
    #后端服务器数据回传时间_就是在规定时间内后端服务器必须传完所有数据
    proxy_buffer_size 128k;
    #代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可  
    proxy_buffers 4 128k;
    #同上 告诉Nginx保存单个用的几个Buffer最大用多大空间
    proxy_busy_buffers_size 256k;
    #如果系统很忙的时候可以申请更大的proxy_buffers 官方推荐*2
    proxy_temp_file_write_size 128k;
    #proxy缓存临时文件的大小
    proxy_temp_path /usr/local/nginx/temp;
    #用于指定本地目录来缓冲较大的代理请求
    proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
    #设置web缓存区名为cache_one,内存缓存空间大小为12000M,自动清除超过15天没有被访问过的缓存数据,硬盘缓存空间大小200g

此处的重点在最后一句,缓存存储路径为:/usr/local/nginx/cache,levels=1:2代表缓存的目录结构为2级目录

如下图,缓存会在/usr/local/nginx/cache目录下生成,包含2级目录,在之下就是缓存文件,测试的时候可以到该目录下查看缓存文件是否生成。
在这里插入图片描述
第二步:在访问静态文件的location上添加缓存

#静态数据保存时效
location ~ \.html$ {
      proxy_pass http://source.qingk.cn;
      proxy_redirect off;
      proxy_cache cache_one;
      #此处的cache_one必须于上一步配置的缓存区域名称相同
      proxy_cache_valid 200 304 12h;
      proxy_cache_valid 301 302 1d;
      proxy_cache_valid any 1m;
      #不同的请求设置不同的缓存时效
      proxy_cache_key $uri$is_args$args;
      #生产缓存文件的key,通过4个string变量结合生成
      expires 30d;
      #其余类型的缓存时效为30天
      proxy_set_header X-Forwarded-Proto $scheme;
}

此处需要注意3点:

1、只有在proxy_pass的时候,才会生成缓存,下一次请求执行到proxy_pass的时候会判断是否有缓存,如果有则直接读缓存,返回给客户端,不会执行proxy_pass;如果没有,则执行proxy_pass,并按照规则生成缓存文件;可以到nginx的cache文件夹下看是否生成了缓存文件。

2、proxy_set_header Host $host这一句可能导致缓存失败,所以不能配置这一句。我在测试的时候遇到了这个问题,不明原理。

3、proxy_pass使用upstream,换成域名或ip则可行。

第三步:在proxy_pass跳转的location中配置静态文件的路径

location ~ .*\.(html)$ {
    default_type 'text/html';
    root "/usr/local/openresty/nginx/html";
}

将nginx本地存放静态文件的路径配到root指令处

如果没有这一句:default_type 'text/html',所有的请求都默认是下载文件,而不是访问html页面

到此,静态文件缓存已经配置完成。但是还差很重要的最后一步,缓存生成之后会阻止访问进入后台和nginx本地,如果有更新,则更新内容无法生效,还需要一种手动清除缓存的机制。

第四步:清除缓存

缓存文件是根据proxy_cache_key这个指令生成的,所以找到对应的缓存文件,删除即可

location ~ /purge(/.*) {
    #删除指定缓存区域cache_one的特定缓存文件$1$is_args$args
    proxy_cache_purge cache_one $1$is_args$args;
    #运行本机和10.0.217.0网段的机器访问,拒绝其它所有  
    allow           127.0.0.1;
    allow           10.0.217.0/24;
    deny          all;
}

删除缓存用到proxy_cache_purge指令。

页面缓存

1、缓存指令

Nginx的缓存配置比较直观简单,具体有下面几个指令需要知道:

A、proxy_cache_path

格式:proxy_cache_path path [levels=numbers] keys_zone=zone_name:zone_size[inactive=time] [max_size=size]

说明:

path -缓存文件存放的位置

levels -缓存目录结构,可以是1、2、3位数字作为目录,最多是3位数字如:1,1:2

keys_zone -指定缓存池名字及大小,每个定义缓存路径必须不同

inactive -设置每个缓存区缓存文件的有效时长,超过该时长没被访问的缓存被删除

max_size -设置不活动的缓存大小,不活动的缓存超过该大小后被删除

B、proxy_cache

格式:proxy_cache cache_name

说明:

指定缓存区域的名字,一个相同的区域可以在不同的地方使用。

C、proxy_cache_valid

格式:proxy_cache_valid reply_code [reply code…|any] time;

说明:

reply_code -不同的应答代码

time -为不同应答设置不同缓存时长 默认为分钟m

any - 代表任何代码

2、页面缓存设置

A、新建缓存页面

$ mkdir –pv /nginx/cache/webpages

B、配置nginx.conf

proxy_cache_path /nginx/cache/webpages levels=1:2 keys_zone=webpages:30mmax_size=2g;

    server {

        listen       80;

        server_name  localhost;

        charset utf-8;

 
        location / {

            proxy_passhttp://webservers;

            proxy_set_header X-Real-IP$remote_addr;

            proxy_cache webpages;

            proxy_cache_valid 20010m;

        }

    }

最后,测试下配置是否正确:

$sudo nginx –t

在这里插入图片描述
然后,重载下nginx服务:

$sudo nginx –s reload

C、测试结果

浏览器输入:http://127.0.0.1 然后查看缓存路径下是否生成缓存文件,以及缓存文件格式是否正确,缓存的结果:

/nginx/cache/webpages/f/63/681ad4c77694b65d61c9985553a2763f

上面的路径规则已经按照我们预期设置生成,缓存文件格式是url的hash格式,下面可以查看下这个文件是否是我们使用的页面,默认生成的缓存目录f 级别是不允许进入访问的,为了演示我已经给予其777权限了。

$cat 681ad4c77694b65d61c9985553a2763f

在这里插入图片描述
D、如何知道是否访问缓存?

答案很简单,我们使用谷歌浏览器浏览网页,然后打开开发者面板,查看里面的Response Headers响应头中的信息:
在这里插入图片描述
但从上面是看不出是否调用了缓存文件,因为需要额外配置下。首先,要了解下两个缓存变量:

$server_addr - 显示的服务器地址

$upstream_cache_status - 缓存的状态 可能的值为:MISS(未命中)、Hint(命中)、Expired(请求传递到后台)、Stale(后端得到过期的应答)、Updating(正更新,使用旧的应答)等。

那么,在这里如果缓存的状态为HINT,就说明命中了缓存,也就是调用了缓存文件。接下来,配置下nginx.conf文件,然后重新加载,刷新页面即刻,具体如下:

A、配置文件nginx.conf

proxy_cache_path /nginx/cache/webpages levels=1:2 keys_zone=webpages:30mmax_size=2g;

    server {

        listen       80;

        server_name  localhost;

        charset utf-8;

        #add headers

        add_header X-Via$server_addr;

        add_header X-Cache$upstream_cache_status;

        location / {

            proxy_passhttp://webservers;

            proxy_set_headerX-Real-IP $remote_addr;

            proxy_cache webpages;

            proxy_cache_valid 20010m;

        }

    }

B、测试结果
在这里插入图片描述
如上图中的Resonpse Headers部分,已经说明缓存已经调度了。


Nginx设置expires设定页面缓存时间 不缓存或一直使用缓存

配置expires

expires起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求
要配置expires,可以在http段中或者server段中或者location段中加入

       location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {
           root /var/www/img/;
           expires 30d;
       }

控制图片等过期时间为30天,当然这个时间可以设置的更长。具体视情况而定
比如

       location ~ \.(wma|wmv|asf|mp3|mmf|zip|rar|swf|flv)$ {
               root /var/www/upload/;
               expires max;
       }

expires 指令可以控制 HTTP 应答中的“ Expires ”和“ Cache-Control ”的头标(起到控制页面缓存的作用)
语法:expires [time|epoch|max|pff]
默认值:off
expires指令控制HTTP应答中的“Expires”和“Cache-Control”Header头部信息,启动控制页面缓存的作用
time:可以使用正数或负数。“Expires”头标的值将通过当前系统时间加上设定time值来设定。

time值还控制"Cache-Control"的值:

  • 负数表示no-cache
  • 正数或零表示max-age=time
  • epoch:指定“Expires”的值为 1 January,1970,00:00:01 GMT
  • max:指定“Expires”的值为31 December2037 23:59:59GMT,"Cache-Control"的值为10年。
  • -1:指定“Expires”的值为当前服务器时间-1s,即永远过期。
  • off:不修改“Expires”和"Cache-Control"的值

expires使用了特定的时间,并且要求服务器和客户端的是中严格同步。
而Cache-Control是用max-age指令指定组件被缓存多久。
对于不支持http1.1的浏览器,还是需要expires来控制。所以最好能指定两个响应头。但HTTP规范规定max-age指令将重写expires头。

【信息系统项目管理师】第18章:项目绩效域详解 (3)度量绩效域与规划绩效域、项目工作绩效域和交付绩效域的相互作用:1规划构成了 交付和规划比较的基础;项目绩效域共同构成了一个统一的整体,作为一个完整系统,在项目生命周期过程中运行,系统内的每个绩效域相互作用、相互关联和相互依赖,并协调一致、共同运作,支撑项目目标和价值 的实现。(5)开发方法和生命周期绩效域与其他绩效域的相互作用:开发方法和生命周期绩效域与干系人绩效域、规划绩效域、不确定性绩效域、交付绩效域、项目工作绩效域和团队绩效域相互作用。(2)项目工作绩效域的绩效要点包括:项目过程; 阅读详情

相关推荐

手把手教你用XC7A35T FPGA搭建低成本机器视觉系统(含开发板选型指南)

本文详细介绍了如何利用AMD(原Xilinx)Artix-7系列中的XC7A35T FPGA芯片,搭建一套低成本的机器视觉系统。内容涵盖从芯片选型深度剖析、开发板(如黑金AX7035B)对比指南,到使用Vivado创建工程、编写图像处理模块(如RGB转灰度),以及资源优化和与上位机(如OpenCV)协同工作的完整流程,旨在为开发者提供一套可实践的高性价比硬件加速视觉解决方案。

beta5的博客 353

nginx配置浏览器缓存(强缓存、协商缓存、无缓存)

> 强缓存:浏览器不与服务端协商直接取浏览器缓存 > 协商缓存:浏览器会先向服务器确认资源的有效性后才决定是从缓存中取资源还是重新获取资源 > 无缓存:浏览器直接向服务器重新获取资源

JarryNeverGiveup的博客 1万+

用Multisim仿真石英晶体振荡电路:从等效模型到频响曲线实战

本文通过Multisim软件,从构建石英晶体等效电路模型入手,详细演示了如何仿真分析其电抗频率特性曲线,并实战搭建与调试皮尔斯振荡电路。文章深入探讨了振荡必须工作在串联与并联谐振点之间感性区的原因,为电子设计者提供了从理论到仿真的完整可视化学习路径。

ik67890123的博客 503

Nginx缓存配置

Nginx 不仅仅是一个 Web 服务器,它还可以作为一个缓存服务器使用。通过 Nginx 缓存,可以对一些静态资源或者数据更新频率较低的后端服务做缓存,降低静态资源或后端服务的响应时间,同时也会降低后端的负载。可以在一定程度上,减少服务器的处理请求压力。比如对一些图片,css或js做一些缓存,那么在每次刷新浏览器的时候,就不会重新请求了,而是从缓存里面读取。这样就可以减轻服务器的压力。

m0_74412260的博客 1万+

Python批量注册脚本开发详细

开发一个Python批量注册脚本需要考虑多个方面,包括目标网站的注册流程、验证码处理、请求发送、数据存储等。以下是一个详细的开发流程和代码示例,用于实现基本的批量注册功能。

nsp202505的博客 3346

ESD放电模式以及电源箝位 (power clamp )电路

由于ESD电压具有很快的上升速度(其ESD脉冲上升时间约在10ns左右),Vrc端的电压因为RC延迟效应无法跟得上VDD端的ESD电压上升速度,Vrc端的为低电位导致反相器工由于ESD电压具有很快的上升速度(其ESD脉冲上升时间约在10ns左右),Vrc端的电压因为RC延迟效应无法跟得上VDD端的ESD电压上升速度,Vrc端的为低电位导致反相器工作将输出端Vout电压上拉到高电位。从而Vg端的高电位触发导通了NMOS元件(Mesd)的晶体管,因而ESD电流便经由Mesd而泄放掉。由于晶体管Mesd的栅极导通

DOG_BITE_DOG的博客 2万+

微信小程序webview内嵌H5页面缓存

微信小程序webview内嵌H5页面缓存 参考链接: link. 问题描述: 公司项目已经开发了一个移动端的vue项目,以微信小程序作为一个入口,节省资源去原生开发,webview成了最好的选择。vue项目已经更新到nginx上线成功,但在小程序展示还是上次版本的内容,并未更新。虽然webview 在不确定的时间段是可以进行缓存刷新,但达不到实时更新的需求。 解决方案: 微信小程序webview 访问资源是通过 URL 地址,如果内嵌 H5 的地址不发生变化,那么 webview 访问资源会从缓存里取,而缓

zz15914045233的博客 2288

手教你如何使用Simulink和相关工具箱模拟和实现无人机的多机接力信号中继的建模

扩大通信范围:单架无人机的通信能力有限,通过多机接力的方式可以显著扩展通信覆盖范围。提高可靠性:当某架无人机出现故障或电量不足时,其他无人机可以接管其任务,确保通信不中断。适应复杂环境:在山区、森林等复杂地形中,多机接力可以绕过障碍物,建立稳定的通信链路。使用Communications Toolbox中的模块来模拟无线通信链路。例如,可以使用模块模拟噪声信道,或者使用模块计算信号衰减。matlab深色版本。

MHD0815的博客 767

Nginx(11)-缓存详细配置及缓存多种用法

缓存可以提高性能并减少负载,这意味着可以用更少的资源更快地提供服务。NGINX 允许在NGINX 服务器的任何地方缓存内容。借助 NGINX 缓存,还可以在代理的服务器发生故障时被动地缓存并提供缓存的响应。缓存功能仅在 http 上下文中可用。

davidwkx的博客 6239

建行报专版报道建设银行金融科技发展历程

经过十多年的建设,总行前中后台部门都有了自己的业务系统,但系统“部门”特征显著,渠道、客户、产品的横向整合不足,产品系统层次化、结构化、参数化程度不高,渠道支持产品快速部署以及跨渠道服务能力不足,管理分析类系统建设相对滞后,系统较弱的可扩展能力在应对高速增长的交易量时已疲态尽显,同时安全稳定运行的压力和风险日益积聚。站在新的历史起点上,科技条线将聚焦主责主业,完善信息科技管理体系,紧紧围绕安全生产中心任务,持续推动技术能力复用共享和自主可控,为全行做好金融五篇大文章,推动业务高质量发展提供技术支撑。

银行信息系统应用架构详解 386

ros系统在Debian系统上的移植

摘要:本文详细介绍了在Debian系统上移植ROS(机器人操作系统)的完整流程。主要内容包括:1)Debian版本与ROS版本的对应关系;2)配置软件源和安装依赖的具体命令;3)安装ROS核心组件和开发工具的步骤;4)常见兼容性问题的解决方案;5)性能优化和维护建议。重点强调了版本匹配的重要性,推荐选择LTS版本组合(如Debian11+ROS Noetic),并提供了从基本安装到自定义功能包编译的全套方案。文中包含详细的终端命令,可帮助用户顺利完成ROS移植并解决可能遇到的问题。

start_up_go的博客 1493

Nginx配置浏览器缓存,页面展示更快一步

Nginx配置浏览器缓存,页面展示更快一步

StoNENee的博客 2813

小米汽车车载多摄像头视频链路深度解析 | MAX96792/MAX96724/MAX96781 实战分享

通过合理的输入输出规划 + 虚拟通道管理 + 加串行策略,可以在成本和性能之间取得最佳平衡,这就是多摄像头系统设计的核心精髓。

weixin_43199439的博客 1547

使用Nginx实现页面缓存

1、缓存指令 Nginx的缓存配置比较直观简单,具体有下面几个指令需要知道: A、proxy_cache_path 格式:proxy_cache_path path [levels=numbers] keys_zone=zone_name:zone_size[inactive=time] [max_size=size] 说明: path -缓存文件存放的位置 levels -缓存目录结构,可以是1、2、3位数字作为目录,最多是3位数字如:1,1:2 keys_zone -指定缓存池名字及大小,

houxian1103的博客 1406

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Nginx读取Memcached实现页面内容缓存

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34138139的博客 157

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

使用nginx实现页面缓存

events { #的最大连接数(包含所有连接数)1024 worker_connections 1024; ## Default: 1024 } http{ # 代理缓存配置 pitch_cachedata:缓存html页面路径 proxy_cache_path "./pitch_cachedata" levels=1:2 keys_zone=pitchcach...

xiaobo5264063的博客 831

nginx实现页面缓存

参看:https://www.cnblogs.com/wangzhilei/p/6706102.htmlNginx可以配置静态资源 反向代理的如何知道是否调用缓存 可以参看此博文的操作

u013045102的专栏 1655

nginx+memcache实现页面缓存应用

一.前言 nginx的memcached_module模块可以直接从memcached服务器中读取内容后输出,后续的请求不再经过应用程序处理,如php-fpm、django,大大的提升动态页面的速度。nginx只负责从memcached服务器中读取数据,要往memcached写入数据还得需要后台的应用程序来完成,主动的将要缓存的页面缓存到memcached中,可以通过404重定向到后端去处理的。...

yueng_tao的博客 261

php nginx memcached,使用nginx ngx_http_memcached_module及memcached实现页面缓存

页面静态化是前端优化的一个重要方法,一般采用生成静态文件的方式实现。这里我尝试采用另外一种方式去实现,就是直接把页面用Memcached进行缓存,然后通过Nginx直接去访问。采用Memcached缓存页面的好处是什么呢?由于页面是缓存在内存里,所以减少了系统的I/O操作。可以直接利用Memcached的分布式特性。可以直接利用缓存的过期时间,方便对页面的过期时间进行处理。部署简单,生成静态文件还...

weixin_28783097的博客 282

nginx探索(10)使用nginx的proxy_cache模块实现前端页面缓存(centos7环境下)

说明:可能我们都知道squid,squid是一个很流行的web页面缓存软件,接下来我们用nginx的proxy_cache模块实现类似squid的页面缓存功能。 1.搭建一台负载均衡服务器,同时这台服务器也做为proxy_cache缓存服务器ip为192.168.241.205搭建三台web服务器ip地址分别为192.168.241.10,192.168.241.11,192.168.241.12,当这四台服务器正常运转时,192.168.241.205接收到请求后会去192.168.241.10,192

u014415344的博客 820

nginx+redis 实现 jsp页面缓存,提升系统吞吐率

转载:http://www.tuicool.com/articles/vEv2ey nginx+redis 实现 jsp页面缓存,提升系统吞吐率 时间 2015-07-26 10:44:00  博客园-原创精华区 原文  http://www.cnblogs.com/luochengqiuse/p/4677027.html 主题 Nginx Redis 最近在

383

Lua+Nginx+Openresty 实现主页面二级缓存

在/root/lua目录下创建ad_load.lua ,缓存预热.,实现连接mysql取到数据放入redis中 -- 设置编码集 ngx.header.content_type="application/json;charset=utf8" --引用cjson local cjson = require("cjson") --引用mysql local mysql = require("resty...

没有 668

Nginx+Tomcat实现反向代理、页面缓存、动静分离

http://www.2cto.com/os/201301/185533.html Nginx+Tomcat实现反向代理与动静分离Nginx+Tomcat实现反向代理、页面缓存、动静分离nginx.conf示例:user apache apache; worker_processes 8; error_log /usr/local/nginx/logs/error.log...

weixin_34199335的博客 266
上一篇: redis 业务锁 not exist 模式
下一篇: Nginx反向代理实现负载均衡总结
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值