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


相关文章:
Nginx使用proxy_cache指令设置反向代理缓存静态资源
场景 CentOS7中解压tar包的方式安装Nginx: CentOS7中解压tar包的方式安装Nginx_centos7 tar文件 怎么load_霸道流氓气质的博客-CSDN博客 参考上面流程实现搭建Nginx的基础上,实现静态资源的缓存设置。 注意上面安装时的目录是在/opt/nginx目录下&…...
React安装ant design组件库,并使用
ant design是一个很棒的组件库,官方地址:快速上手 - Ant Design 但是如何在React里面用起来,好像并不是很顺畅,没有像Vue里面那么友好,因为我踩过这个坑,虽然安装很简单,但是想要出样式&#x…...
Leetcode | 有效的括号、最长有效括号
一、有效的括号 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应…...
思科模拟器配置静态路由(下一跳使用IP)
Router0配置代码:##端口配置 Router(config)#int fastEthernet 0/0 Router(config-if)#ip address 192.168.10.254 255.255.255.0 Router(config-if)#no shutdown Router(config-if)#int fastEthernet 0/1 Router(config-if)#ip address 192.168.20.1 255.255.255.2…...
MyBatis -- 执行流程
传统JDBC开发 代码样例 import java.sql.*;public class JdbcExample {public static void main(String[] args) {Connection conn DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");// 创建…...
springboot背诵
1、springboot简介 2、spring注解 Bean: Configuration: Component: Controller: Service: Repository: ComponentScan: Import: Conditional: ConfigurationProperties&…...
WebGL: 几个入门例子
本文罗列几个WebGL入门例子,用于帮助WebGL学习。 例子1:绘制三角形 <!DOCTYPE HTML> <html loang"en"><head><title>Triangle</title><meta charset"utf-8"><script>var gl;var canvas…...
App Cleaner Uninstaller for Mac 苹果电脑软件卸载工具
App Cleaner & Uninstaller 是一款非常有用的 Mac 应用程序清理和卸载工具。它可以彻底地清理系统中的应用程序、扩展和残留文件,以释放磁盘空间并优化系统性能。 此外,它还提供了磁盘空间监控和智能清理建议等功能,使用户可以轻松地管理…...
基于Yolov2深度学习网络的车辆检测算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. 卷积神经网络(CNN) 4.2. YOLOv2 网络 4.3. 实现过程 4.4. 应用领域 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心…...
Java的I/O类库- NIO
Java NIO(New I/O)是Java平台提供的一种用于非阻塞I/O操作的API。它引入了一组新的Java类,用于实现高性能的、非阻塞的I/O操作,以替代传统的阻塞式I/O(IO Blocking)模型。Java NIO的核心是基于Channel&…...
【ASP.NET MVC】使用动软(三)(11)
一、问题 上文中提到,动软提供了数据库的基本操作功能,但是往往需要添加新的功能来解决实际问题,比如GetModel,通过id去查对象: 这个功能就需要进行改进:往往程序中获取的是实体的其他属性,比如…...
基于MATLAB长时间序列遥感数据植被物候提取与分析
MATLAB MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。 [1] MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂&a…...
K8S deployment 重启的三种方法
一般重启deployment,常规操作是删掉对应的pod, 但如果有多个副本集的话,一个个删很麻烦。 除了删除pod,还可以: 方案一: 加上环境变量 kubectl patch deploy <deployment-name> -p {"spec":{"…...
解决Linux下PyCharm无法新建文件
一、问题描述 如图,在Ubuntu Linux系统中使用pycharm管理项目时,提示无法新建.py源文件: 二、问题解决 将问题定性为文件夹(目录)权限问题,在终端中打开项目文件夹的上级目录,将整个项目目录的…...
规则引擎技术解决方案
1 概述 1.1 规则引擎的背景 业务系统在应用过程中,常常包含着要处理“复杂、多变”的部分,这部分往往是“业务规则”或者是“数据的处理逻辑”。因此这部分的动态规则的问题,往往需要可配置,并对系统性能和热部署有一定的要求。从…...
2023奇安信天眼设备--面试题
1.在天眼分析平台网络协议中sip、dip、sport、dport字段表示的含义是什么? sip 源IP、dip 目的IP、sport 源端口、dport 目的端口 2.在天眼分析平台DNS协议中dns type字段表示的含义是? dns type表示DNS请求类型 0代表DNS请求,1代表DNS响应 3.dns_typ…...
【剑指Offer 58】 左旋转字符串,Java解密。
LeetCode 剑指Offer 75道练习题 文章目录 剑指Offer:左旋转字符串示例:限制:解题思路:剑指Offer:左旋转字符串 【题目描述】 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdef…...
Python SMTP发送邮件
Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的…...
Jmeter-获取接口响应头(Response headers)信息进行关联
文章目录 Jmeter-获取接口响应头(Response headers)信息进行关联使用正则表达式提取器将Set-Cookie的值提取出来在其余接口中关联该提取信息运行查看关联是否成功 Jmeter-获取接口响应头(Response headers)信息进行关联 获取某一…...
解密爬虫ip是如何被识别屏蔽的
在当今信息化的时代,网络爬虫已经成为许多企业、学术机构和个人不可或缺的工具。然而,随着网站安全防护的升级,爬虫ip往往容易被识别并屏蔽,给爬虫工作增加了许多困扰。在这里,作为一家专业的爬虫ip供应商,…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
