14、Nginx---缓存服务

news2025/2/9 12:08:34

一、缓存类型

1、服务器端缓存
2、代理缓存
3、客户端缓存
代理缓存的原理:

二、代理缓存配置语法

2.1、代理缓存路径

proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size]
[manager_files=number] [manager_sleep=time] [manager_threshold=time]
[loader_files=number]  [loader_sleep=time]  [loader_threshold=time]
[purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
默认:-
配置块:http
解释:
  • path      缓存文件路径
  • levels    设置缓存文件目录层次;levels=1:2 表示两级目录
  • keys_zone 设置缓存名字和共享内存大小
  • inactive  在指定时间内没人访问则被删除
  • max_size  最大缓存空间,如果缓存空间满,默认覆盖掉缓存时间最长的资源。

2.2、配置代理缓存

proxy_cache zone|off;  # 是否开启缓存,是的话zone填写keys_zone后的name值,不开启off
默认:proxy_cache off;
配置块:http、server、location

2.3、缓存过期时间

proxy_cache_valid [code ...] time;  # 缓存过期周期,code表示状态码
默认:-
配置块:http、server、location
例如配置 proxy_cache_valid 200 12h 意思是状态码为 200 的 缓存 12个小时。

2.4、缓存的维度

proxy_cache_key string; # 缓存的维度
默认:proxy_cache_key  $scheme $proxy_host $request_uri; http协议 + 主机名 + uri 把这三个作为一个单独的key来缓存。
配置块:http、server、location
 

三、示例

/etc/nginx/conf.d/cache.conf:
upstream imooc {
    server 192.168.11.135:8001;
    server 192.168.11.135:8002;
    server 192.168.11.135:8003;
}

proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=imooc_cache:10m max_size=10g inactive=60m use_temp_path=off;

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        proxy_cache imooc_cache;
        proxy_pass http://imooc;
        proxy_cache_valid 200 304 12h;
        proxy_cache_valid any 10m;
        proxy_cache_key $host$uri$is_args$args;
        add_header Nginx-Cache "$upstream_cache_status";
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    }
}
​
  • proxy_cache_path /etc/nginx/cache: 存放缓存文件的目录
  • levels=1:2: 目录分级,按照两层目录的方式来进行分级。
  • keys_zone=imooc_cache:10m: zone空间的名字,后面配置 proxy_cache 后面配的就是这个名字。10m表示开辟key空间的大小, 一般1m大概能存放8000个key
  • max_size=10g: 表示缓存目录最大是多大,不能让缓存无限增长占满整个磁盘。当缓存空间满了后,Nginx就会触发淘汰规则,把不常访问的就会淘汰掉。
  • inactive=60m: 这个60m是时间单位,表示60分钟, 表示如果在60分钟内如果某个缓存没有被访问过,就会把它清理掉
  • use_temp_path=off:这个是用来存放临时文件的, 建议关闭,如果打开的话,Nginx会另外建立一个目录和cache目录两个目录在更新缓存时容易出现一些性能方面的损耗。
  • proxy_cache imooc_cache : 表示我们已经 开启了代理缓存 ,该值是proxy_cache_path中的 keys_zone 的值,如果不想使用代理缓存,将该值配置成 off。
  • proxy_pass http://imooc: 代理的地址
  • proxy_cache_valid 200 304 12h;: 状态码为200,304的响应过期时间为 12h。
  • proxy_cache_valid any 10m;: 除了200和304状态码的其它状态码的缓存时间为10分钟。
  • proxy_cache_key $host$uri$is_args$args;: 设置默认缓存的key。
        $is_args表示请求中的URL是否带参数,如果带参数,$is_args值为"?"。如果不带参数,则是空字符串。
        $args表示HTTP请求中的参数。
  • add_header Nginx-Cache "$upstream_cache_status";: 增加一个http响应头信息,Nginx-Cache, 告诉客户端是否已经命中代理缓存
  • proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;: 当我们的后端其中一台服务器出现错误,超时,或者500,502,503,504等不正常的头返回时,就跳过这一台,去访问下一台。避免因为单台服务器的异常对前端产生影响。
三台服务器的配置:
第一台:
/etc/nginx/conf.d/server1.conf
server {
    listen       8001;
    server_name 127.0.0.1;
    location / {
        root /home/testzq/app/code1;
        index index.html;
    }
}
/home/testzq/app/code1/index.html
<html>
<head>
    <meta charset="utf-8">
    <title> server 1</title>
</head>
<body>
    <h1>server 1</h1>
</body>
</html>
第二台:
/etc/nginx/conf.d/server2.conf
server {
    listen       8002;
    server_name 127.0.0.1;
    location / {
        root /home/testzq/app/code2;
        index index.html;
    }
}
/home/testzq/app/code2/index.html
<html>
<head>
    <meta charset="utf-8">
    <title> server 2</title>
</head>
<body>
    <h1>server 2</h1>
</body>
</html>
第三台:
/etc/nginx/conf.d/server3.conf
server {
    listen       8003;
    server_name 127.0.0.1;
    location / {
        root /home/testzq/app/code3;
        index index.html;
    }
}
/home/testzq/app/code3/index.html
<html>
<head>
    <meta charset="utf-8">
    <title> server 3</title>
</head>
<body>
    <h1>server 3</h1>
</body>
</html>
重启nginx:
nginx -t -c /etc/nginx/nginx.conf            # 测试配置文件语法
nginx -s reload -c /etc/nginx/nginx.conf     # 重新加载配置项
>>>先在代理服务器中将缓存关闭 (proxy_cache off),刷新页面,发现页面可以在三个站点间轮询显示:
  
>>>然后在把代理缓存打开,发现页面不在轮询了,请求头多了缓存头(这头是我们配置的):
同时也会在我们配置的缓存目录( /etc/nginx/cache)生成缓存目录:
缓存的内容如下:

四、清理指定缓存

如何清理指定缓存?
法1:rm -rf 缓存目录内容
法2:第三方扩展模块nginx_cache_purge
  
如何让部分页面不缓存:
proxy_no_cache string ...;
默认:-
配置块:http、server、location
比如:这里配置的意思就是当url中匹配到了 index.html , login, register, password 和 reset 时,不缓存该url所对应的页面

五、缓存命中分析

方式1:
通过设置 response 的头信息 Nginx-Cache:
add_header Nginx-Cache "$upstream_cache_status";
没缓存时,Nginx-Cache:Miss,有缓存时如下:
 
方式2:
通过设置 log_format,打印日志进行分析。(打印 $upstream_cache_status 这个Nginx默认的变量)
$upstream_cache_status 这个变量有以下几种值
缓存命中率 = HIT次数 / 总请求次数
  
1、首先在 /etc/nginx/nginx.conf 中的 log_format 中加入 $upstream_cache_status 这个变量:
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" '
                  '"$upstream_cache_status"';
2、然后配置缓存代理的 access_log 的路径
3、然后使用linux 的awk 命分析日志
awk '{if($NF=="\"HIT\""){hit++}}END{printf "%.2f", hit/NR}' /var/log/nginx/proxy_cache_access.log

命令解释:

  • $NF :  日志每行的最后一个参数。
  • hit:我们自定义的一个变量,用来记录被命中的次数。
  • NR:AWK的内置变量,表示本次分析所扫描日志的总行数。
命令执行结果:

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

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

相关文章

如何让你的allure报告测试步骤更清晰,更具吸引力?

引言 在软件测试中&#xff0c;清晰的测试步骤对于团队的协作和问题跟踪至关重要&#xff0c;Allure报告是一种强大的工具&#xff0c;能够将测试结果以直观和易于理解的方式呈现给您的团队和客户。 想要让Allure报告更具吸引力和可读性吗&#xff1f;那就不要错过我的精彩建…

MIT6.024学习笔记(三)——图论(2)

科学是使人变得勇敢的最好途径。——布鲁诺 文章目录 通信网络问题二叉树型直径路由器规模路由器数量拥挤程度 二维数组型直径路由器规模路由器数量拥挤程度 蝴蝶型直径路由器规模路由器数量拥挤程度 benes型直径路由器规模路由器数量拥挤 通信网络问题 在通信网络中&#xff…

Redis基础知识(安装基础指令等)

Redis 基础知识 相关资料 官网: https://redis.io/中文地址: http://redis.cn/下载地址: https://redis.io/download 为什么需要Redis 企业需求 高并发 高可用 高性能 海量用户 关系型数据库(如MySQL)-问题 性能瓶颈&#xff1a;磁盘IO 性能低下 扩展瓶颈&#xff1a…

Java基础小项目——【源码】控制台的类似BOSS招聘的一个应聘者用户和公司用户的就业项目【应聘+招聘】

目录 引出题目要求--云就业平台相关的java基础知识项目分层设计 核心业务图解源码总结 引出 类似BOSS招聘的一个应聘者用户和公司用户的就业项目&#xff0c;控制台项目 题目要求–云就业平台 类似BOSS招聘的一个应聘者用户和公司用户的就业项目 第3章 应用系统功能介绍 3…

【Jetpack】使用 Room Migration 升级数据库并导出 Schema 文件 ( Schema 文件简介 | 生成 Schema 文件配置 | 生成 Schema 文件过程 )

文章目录 一、Schema 文件简介二、生成 Schema 文件配置三、生成 Schema 文件过程1、数据库版本 1 - 首次运行应用2、数据库版本 1 升级至 数据库版本 2 - 第二次运行应用3、数据库版本 2 升级至 数据库版本 3 - 第三次运行应用 一、Schema 文件简介 使用 Room Migration 升级数…

Windows Subsystem for Android (WSA) 下载:在 Windows 11 上运行 Android 应用 (June 2023)

适用于 Android™️ 的 Windows 子系统&#xff0c;2023 年 6 月更新 请访问原文链接&#xff1a;https://sysin.org/blog/wsa/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 适用于 Android™️ 的 Windows 子系统使你的 Wi…

Linux系统之ifconfig命令的基本使用

Linux系统之ifconfig命令的基本使用 一、ifconfig命令介绍1. ifconfig简介2. ifconfig注意事项3. ifconfig命令特点 二、ifconfig命令的使用方法1. 查看ifconfig的帮助信息2. ifconfig的使用帮助 三、安装ifconfig命令工具1. 安装net-tools软件包2. 查看ifconfig工具的版本 四、…

至暗时刻,显卡销量腰斩,NVIDIA提前掏出2000元档4060救场

不知道大家有没有感觉&#xff0c;自从 RTX 40 系显卡面世后&#xff0c;玩家们对于装机热情却是反常理的不增反降。 以往每代新显卡出来&#xff0c;哪次不是掀起一阵装机热潮。 然而这次小忆听到最多的声音就是&#xff1a;手里 750Ti 还能再战、GTX 1060 永远滴神等。 当然…

pandas链式操作与SettingWithCopyWarning详解

1.SettingWithCopyWarning问题 SettingWithCopyWarning是pandas中一个经典问题&#xff0c;也是pandas库中位数不多的坑之一。关于这个问题&#xff0c;我们先看下面的一个例子。 import pandas as pddef t1():data {name: [a, b, c, d, e, f],num: [1, 2, 3, 4, 5, 6],ss: …

Linux系统命令与网络、磁盘参数和日志监控

文章目录 1、grep搜索命令2、wc命令3、 uptime机器启动时间负载4、ulimit用户资源5、scp远程拷贝6、dos2unix和unix2dos7、sed 1、grep搜索命令 grep命令用于在文件中搜索&#xff0c;并显示匹配效果 # 1、在指定文件查找&#xff0c;查找int main grep int main server.c# 2…

接口自动化测试丨如何处理 Header cookie

Cookie&#xff08;复数形态&#xff1a;Cookies&#xff09;是某些网站为了辨别用户身份而储存在用户本地终端上的数据。在接口测试过程中&#xff0c;如果网站采取了 Cookie 认证的方式&#xff0c;那么发送的请求需要附带 Cookie&#xff0c;才会得到正常的响应的结果。接口…

C#中List<T>的排序相关的使用方法总结

C#中List<>的排序相关的使用方法 list的排序一般使用Sort和LINQ的Orderby方法&#xff0c;本文主要介绍其如何使用。 &#x1f32e;1.Sort和实现Comparable接口 此方式需要类去实现IComparable接口 public class OrderTest {[Test]public void OraderTest(){List<E…

【Excel】如何给Excel表格(文档)加密/上锁

目录 0.环境 1.操作步骤 若只输入了【打开权限密码】 若只输入了【修改权限密码】 若同时输入两种密码 0.环境 windows excel2021版 适用情景&#xff1a; 希望给别人提供文档时&#xff0c;需要用密码打开这个文档&#xff0c;加密又分为【打开时加密】和【修改时加密…

【sentinel】Sentinel规则的持久化

Sentinel规则的推送有下面三种模式: 推送模式说明优点缺点原始模式API将规则推送至客户端并直接更新到内存中简单&#xff0c;无任何依赖不保证一致性&#xff1b;规则保存在内存中&#xff0c;重启即消失。严重不建议用于生产环境Pull模式扩展写数据源&#xff08;WritableDa…

【Flutter】MAC环境下打包APK

1、打开终端生成签名文件 keytool -genkey -v -keystore ~/sign.jks -keyalg RSA -keysize 2048 -validity 10000 -alias sign 结果 输入**库口令: 再次输入新口令: 您的名字与姓氏是什么?[Unknown]: yuanzhiying 您的组织单位名称是什么?[Unknown]: gongsi 您的组织…

第1章 信息化发展

文章目录 1.1信息与信息化1.1.1信息1.信息的定义2.信息的特征与质量 1.1.2信息系统1.信息系统及其特性2.信息系统生命周期 1.1.3信息化1.信息化内涵&#xff08;4个&#xff1a;体系、产业、环境、积累&#xff09;2.信息化体系&#xff08;国家信息化体系 6 要素&#xff1a;上…

Spark SQL数据源:Hive表

文章目录 一、Spark SQL支持读写Hive二、Spark配置hive-site.xml三、准备工作&#xff08;一&#xff09;启动Hive的metastore&#xff08;二&#xff09;启动Spark Shell 四、Spark读写Hive数据&#xff08;一&#xff09;导入SparkSession&#xff08;二&#xff09;创建Spar…

阿里技术官肝了 3 个月才完成的 20 万字 Java 面试手册

金三银四已经过去&#xff0c;不知道你是已经上岸&#xff0c;还是在等秋招。为了让大家能在面试中如鱼得水&#xff0c;offe 能够手到擒来。小编在此分享一份阿里技术官肝了 3 个月才完成的 20 万字 Java 面试手册。 这份面试手册涉及的技术栈非常全面而且足够细致&#xff0…

在字节跳动和阿里划水4年,过于真实了...

先简单交代一下吧&#xff0c;涛哥是某不知名211的本硕&#xff0c;18年毕业加入阿里&#xff0c;之后跳槽到了头条&#xff0c;一直从事测试开发相关的工作。之前没有实习经历&#xff0c;算是四年半的工作经验吧。 这四年半之间他完成了一次晋升&#xff0c;换了一家公司&am…

MySQL数据库用户管理

MySQL数据库用户管理 一、MySQL常用的6大约束二、数据表的高级操作1.克隆表2.清空表&#xff0c;删除表内的所有数据3&#xff0e;创建临时表4&#xff0e;创建外键约束&#xff0c;保证数据的完整性和一致性 三、数据用户管理1.新建用户2&#xff0e;查看用户信息3&#xff0e…