Nginx使用proxy_cache指令设置反向代理缓存静态资源

场景

CentOS7中解压tar包的方式安装Nginx:

CentOS7中解压tar包的方式安装Nginx_centos7 tar文件 怎么load_霸道流氓气质的博客-CSDN博客

参考上面流程实现搭建Nginx的基础上,实现静态资源的缓存设置。

注意上面安装时的目录是在/opt/nginx目录下,这里是在/usr/local/nginx目录下。

Nginx缓存静态资源

nginx作为一款高性能的web服务器,可以在代理请求时缓存静态资源。

当用户请求一个静态资源时,nginx会先从本地缓存中查找。如果缓存中存在这个资源,

nginx会直接返回给用户;如果缓存中不存在这个资源,nginx会从上游服务器获取,

然后存储到本地缓存中并返回给用户。

Nginx 服务器中,还有一种使用 proxy_ cache 指令设置的临时缓存配置,它采用 md5法

将请求链接进行哈希( hash )后,根据具体配置生成缓存文件目录,保存响应的数据。

准备两台虚拟机并安装配置两个Nginx服务器,一台ip是192.168.148.141作为Web缓存服务器,

另一台是192.168.148.142作为内容源Web服务器。

注:

博客:
霸道流氓气质_C#,架构之路,SpringBoot-CSDN博客

实现

1、首先配置Web缓存服务器192.168.148.141

编辑nginx.conf配置文件,在http块中添加如下配置

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

注意这里的两个路径,因为nginx是安装在/usr/local/nginx下,所以上面出现的两个路径是在此路径的基础上配置,需要根据

自己需要改成对应的路径。

上面配置的指令

proxy_temp_path用于设置缓存服务器接收内容源服务器响应内容时使用的临时目录。

proxy_cache_path指令用于设置缓存目录,相关参数含义:

/usr/local/nginx/proxy_cache_dir参数表示用户自定义的缓存文件保存目录。

levels参数表示缓存目录下的层级目录结构,它是根据哈希后的请求URL地址创建的,目录名称从哈希后的字符串结尾处开始截取。

keys_zone参数指定缓存区名称及大小,例如,cache_one:50m表示缓存区名称为cache_one,在内存中的空间是50MB。

inactive参数表示主动清空在指定时间内未被访问的缓存。例如,1m清空在一分钟内未被访问过的缓存,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  192.168.148.141;#charset koi8-r;#access_log  logs/host.access.log  main;#增加两个响应头信息,用于获取访问的服务器地址与缓存是否成功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_valid 304 1m;      #304缓存1分钟proxy_cache_valid 301 302 1h;  #301 302缓存1小时proxy_cache_valid any 1m;      #其他未设置的状态码缓存1分钟#设置反向代理proxy_pass http://192.168.148.142;}​

注意添加位置

配置详解:

proxy_cache用于设置缓存区域名称。

proxy_cache_key用于设置hash的Key值组成规则,在省略的情况下,Nginx将使用默认的Key值组成规则。

proxy_cache_key具体内置变量说明:

$host:服务器的域名。

$uri:域名和参数之间的部分。

$is_args:有URL参数时,则值为?,否则为空字符串。

$args:保存URL参数,如a=1&b=2,没有参数时为空字符串。

proxy_cache_valid指令对不同的HTTP状态码设置不同的缓存时间,该指令的第一个参数表示状态码,第二个参数表示缓存时间。

add_header指令添加了两个响应头,为了便于在浏览器端查看是否正确缓存。

X-Via表示服务器地址,利用内置变量$server_addr获取,另一个X-Cache表示资源缓存状态,利用内置变量$upstream_cache_status获取。

$upstream_cache_status的返回值有7个:

HIT表示缓存命中

MISS表示未命中,请求被传送到后端

EXPIRED表示缓存已经过期,请求被传送到后端

UPDATING表示正在更新缓存,将使用旧的应答

STALE表示无法从后端服务器更新缓存时,返回了旧的缓存内容

BYPASS表示缓存被绕过了

REVALIDATED表示启用proxy_cache_revalidate指令后,当缓存内容过期时,Nginx通过一次If-Modified-Since的请求头去验证缓存内容是否过期,

此时会返回该状态。

注意:

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

2、访问测试

在内容源服务器192.168.148.142中放置几个测试文件,用于访问测试。

这里nginx使用的默认配置,所以将文件上传至/usr/local/nginx/html目录下

比如这里新建一个badao.html

<h1>192.168.148.142/badao.html!</h1>

然后启动两台服务器的nginx,在浏览器中访问

http://192.168.148.141/badao.html

此时打开浏览的开发工具-网络-点击bdao.html,找到响应表头,查看X-Via和X-Cache的值,可以看到此时为MISS

一分钟内进行第二次请求时为HIT

此时再查看缓存服务器192.168.148.141上面配置的缓存目录/usr/local/nginx/proxy_cache_dir下,

 

可以看到缓存文件。这里使用tree指令查看

该命令需要通过

yum -y install tree

安装后才可以使用。

为了深度验证,在141上请求之后,立即将142上的对应文件进行重命名,此时一分钟内141仍然可以通过缓存获取。

等到缓存过期之后再次访问则会提示404

 

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

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

相关文章

ELK中grok插件、mutate插件、multiline插件、date插件的相关配置

目录 一、grok 正则捕获插件 自定义表达式调用 二、mutate 数据修改插件 示例&#xff1a; ●将字段old_field重命名为new_field ●添加字段 ●将字段删除 ●将filedName1字段数据类型转换成string类型&#xff0c;filedName2字段数据类型转换成float类型 ●将filedNam…

Leetcode每日一题:1289. 下降路径最小和 II(2023.8.10 C++)

目录 1289. 下降路径最小和 II 题目描述&#xff1a; 实现代码与解析&#xff1a; 动态规划 原理思路&#xff1a; 1289. 下降路径最小和 II 题目描述&#xff1a; 给你一个 n x n 整数矩阵 grid &#xff0c;请你返回 非零偏移下降路径 数字和的最小值。 非零偏移下降路…

数据结构-1

1.2 线性结构树状结构网状结构&#xff08;表 数 图&#xff09; 数据&#xff1a;数值型 非数值型 1.2.3数据类型和抽象数据类型 1.3抽象数据类型 概念小结&#xff1a; 线性表: 如果在独立函数实现的 .c 文件中需要包含 stdlib.h 头文件&#xff0c;而主函数也需要包含 st…

短视频账号矩阵系统/技术开发搭建私有部署

本系统是基于短视频领域的新一代系统&#xff0c;旨在提供一个高效、全面的短视频管理与分发平台。系统采用先进的开发算法和技术&#xff0c;实现了智能化视频分类、推荐和用户互动功能。 目录 一、抖音SEO账号矩阵系统的开发和部署遵循以下原则&#xff1a; 二、账号矩阵绑…

谷歌全栈多平台应用开发神器Project IDX来了!PaLM 2加持,代码效率翻倍

一直以来&#xff0c;从0开始构建应用&#xff0c;都是一项复杂的工作。尤其是跨越手机、Web和桌面平台的程序。 这是一片无尽的复杂海洋&#xff0c;需要把技术堆栈融合在一起&#xff0c;来引导、编译、测试、部署、监控应用程序。 多年来&#xff0c;谷歌一直致力于让多平…

EFLFK——ELK日志分析系统+kafka+filebeat架构

环境准备 node1节点192.168.40.16elasticsearch2c/4Gnode2节点192.168.40.17elasticsearch2c/4GApache节点192.168.40.170logstash/Apache/kibana2c/4Gfilebeat节点192.168.40.20filebeat2c/4G https://blog.csdn.net/m0_57554344/article/details/132059066?spm1001.2014.30…

HTTP代理授权方式介绍

在网络爬虫过程中&#xff0c;我们经常需要使用HTTP代理来实现IP隐藏、突破限制或提高抓取效率。而为了确保代理的正常使用&#xff0c;并避免被滥用&#xff0c;代理服务商通常会采用授权方式。在本文中&#xff0c;我们将介绍几种常见的HTTP代理授权方式&#xff0c;以帮助你…

matplotlib 设置legend的位置在轴最上方,长度与图的长度相同

import matplotlib.pyplot as plt import numpy as npx1 np.linspace(0, 10, 50) x2 [6,4,3]ax plt.subplot() ax.plot(x1, label"test1") ax.plot(x2, label"test2") # 设置图例的位置 # 将左下角放置在【0, 1.02】位置处&#xff0c;横为1&#xff0c…

9.2.1Socket(UDP)

一.传输层: 1.UDP:无连接,不可靠,面向数据报,全双工. 2.TCP:有连接,可靠,面向字节流,全双工. 注意:这里的可不可靠是相对的,并且和安不安全无关. 二.UDP数据报套接字编程: 1.socket文件:表示网卡的这类文件. 2.DatagramPacket:表示一个UDP数据报. 三.代码实现: 1.回显服务…

原型和原型链理解

这个图大概能概括原型和原型链的关系 1.对象都是通过 _proto_ 访问原型 2.原型都是通过constructor 访问构造函数 3.原型是构造函数的 prototype 4.原型也是对象实例 也是通过 _proto_ 访问原型(Object.prototype) 5.Object.prototype的原型通过 _proto_ 访问 为null 那么…

【ChatGPT】自我救赎

ChatGPT辅助学习C之【在C中如果大数据类型转小数据类型会发生什么呢?】&#xff0c;今天问ChatGPT一个问题&#xff0c;让它解析下面这个C程序&#xff1a; #include <iostream> #include <cstdio> using namespace std; int main() {int a;long long b532165478…

初学HTML:在线简易画板设计。

最近在HTML&#xff0c;记录下一点点成果。 设计了一个简易画板&#xff0c;通过HTML的Canvas元素实现一个在线画板&#xff0c;用户可以在上面绘制图形或涂鸦。 下面是运行效果&#xff1a; 下面是代码&#xff1a; <!DOCTYPE html> <html> <head><ti…

【Nginx】静态资源部署、反向代理、负载均衡

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ nginx静态资源部署、反向代理、负载均衡 &…

详细教程:如何搭建废品回收小程序

废品回收是一项环保举措&#xff0c;通过回收和再利用废弃物品&#xff0c;可以减少资源浪费和环境污染。近年来&#xff0c;随着智能手机的普及&#xff0c;小程序成为了推广和运营的重要工具。本文将详细介绍如何搭建一个废品回收小程序。 1. 进入乔拓云网后台 首先&#xf…

微信朋友圈置顶功能已大范围上线!

微信是目前全球最受欢迎的社交媒体应用之一&#xff0c;拥有数十亿的用户。作为一款持续发展和改进的应用&#xff0c;微信不断推出新的功能来提升用户体验。 近日&#xff0c;iOS微信8.0.41内测版迎来了更新&#xff0c;本次更新距离上个正式版间隔了大概10天的时间。 微信朋友…

Agents改变游戏规则,亚马逊云科技生成式AI让基础模型加速工作流

最近&#xff0c;Stability AI正式发布了下一代文生图模型——Stable Diffusion XL 1.0这次的1.0版本是Stability AI的旗舰版生图模型&#xff0c;也是最先进的开源生图模型。 在目前的开放式图像模型中&#xff0c;SDXL 1.0是参数数量最多的。官方表示&#xff0c;这次采用的…

SpringBoot源码分析(8)--内置ApplicationContextInitializer

文章目录 1、DelegatingApplicationContextInitializer2、SharedMetadataReaderFactoryContextInitializer3、ContextIdApplicationContextInitializer4、ConfigurationWarningsApplicationContextInitializer5、ServerPortInfoApplicationContextInitializer6、ConditionEvalu…

一行JS代码导出ant-design中复杂table表格的Excel

使用方式 1、安装依赖 npm install xlsx-js-style2、复制代码文件exportExcel.js至工程 https://github.com/EnthuDai/export-excel-in-one-line 3、在引入excel.js后调用 Excel.export(columns, dataSource, 导出文件名)4、代码demo 5、效果 页面excel 适用范围 对于使…

16bit、8 通道、500kSPS、 SAR 型 ADC——MS5188N

MS5188N 是 8 通道、 16bit 、电荷再分配逐次逼近型模数 转换器&#xff0c;采用单电源供电。 MS5188N 拥有多通道、低功耗数据采集系统所需的所有 组成部分&#xff0c;包括&#xff1a;无失码的真 16 位 SAR ADC &#xff1b;用于将输入配 置为单端输入&#xff0…

Spring IoC 详解

目录 一、引言二、Spring Bean三、将一个类声明为 Bean 所涉及的注解四、Component 和 Bean 的区别五、注入 Bean 的注解六、Autowired 和 Resource 的区别七、Bean7.1 作用域7.2 线程安全7.3 生命周期 一、引言 IoC&#xff08;Inversion of Control:控制反转&#xff09; 是…