当前位置: 首页 > news >正文

Web缓存代理

目录

代理的工作机制

代理服务器的概念及其作用

概念

其主要作用

常见的Web缓存代理应用:

数据库缓存代理应用:

Nginx 缓存代理

验证

CDN 内容分发网络

CDN工作原理

CDN的内容是如何获取的


代理的工作机制

  1. 代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址。
  2. 将获得的网页数据(静态 Web 元素)保存到缓存中并发送给客户机,以便下次请求相同的数据时快速响应。

代理服务器的概念及其作用

概念

  • 代理服务器是一个位于客户端和原始(资源)服务器之间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求并指定目标原始服务器,然后代理服务器向原始服务器转交请求并将获得的内容返回给客户端。
  • 缓存代理对于Web至关重要,尤其对于大型高负载Web站点。缓存可作为性能优化的一个重要手段,可以极大减轻后端服务器的负载。通常对于静态资源,即较少经常更新的资源,如图片,css或js等进行缓存,从而在每次刷新浏览器的时候,不用重新请求,而是从缓存里面读取,这样就可以减轻服务器的压力。

其主要作用

  • 资源获取:代替客户端实现从原始服务器的资源获取;
  • 加速访问:代理服务器可能离原始服务器更近,从而起到一定的加速作用;
  • 缓存作用:代理服务器保存从原始服务器所获取的资源,从而实现客户端快速的获取;
  • 隐藏真实地址:代理服务器代替客户端去获取原始服务器资源,从而隐藏客户端真实信息

常见的Web缓存代理应用:

  • 本地实现 Nginx  Squid  Varnish      
  • 云环境远端实现 CDN

数据库缓存代理应用:

  • Redis  Memcached

Nginx 缓存代理

http {proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m 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:直接把临时文件放在缓存目录中。
#####################################################upstream cache_server{server 192.168.88.40:80;server 192.168.88.13:80;}server {listen 80;server_name www.kgc.com;location / {proxy_cache my_cache;               #指定用于页面缓存的共享内存,zone名称由proxy_cache_path指令定义proxy_cache_valid 200 5m;           #为不同的响应状态码设置不同的缓存时间,此为缓存状态码为200的请求,缓存时长为5分钟proxy_cache_key $request_uri;       #指定缓存文件的key为请求的URIadd_header Nginx-Cache-Status $upstream_cache_status      #把缓存状态设置为头部信息,响应给客户端proxy_pass http://cache_server;     #设置代理转发的后端服务器的协议和地址}}
}#对于一些实时性要求非常高的页面或数据来说,就不应该去设置缓存,下面来看看如何配置不缓存的内容。
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {listen 80;server_name cache.lion.club;#URI 中后缀为 .txt 或 .text 的设置变量值为 "no cache"if ($request_uri ~ \.(txt|text)$) {set $cache_name "no cache";}location / {proxy_no_cache $cache_name;      #判断该变量是否有值,如果有值则不进行缓存,如果没有值则进行缓存proxy_cache my_cache;            #设置缓存内存proxy_cache_valid 200 5m;        #缓存状态为200的请求,缓存时长为5分钟proxy_cache_key $request_uri;    #缓存文件的key为请求的URIadd_header Nginx-Cache-Status $upstream_cache_status    #把缓存状态设置为头部信息,响应给客户端proxy_pass http://cache_server;  #代理转发}
}

验证

CDN 内容分发网络

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

CDN工作原理

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

CDN的内容是如何获取的

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

相关文章:

  • 【算法】七夕祭
  • What does `$?` do?
  • C# 语法进阶 委托
  • 基于web的电影院购票系统
  • [C#]winform利用seetaface6实现C#人脸检测活体检测口罩检测年龄预测性别判断眼睛状态检测
  • vue项目使用typescript创建抽象类及其使用
  • 全链路压力测试有哪些主要作用
  • 虽然是个去年的旧新闻,但这透露了IBM的新去向
  • docker/华为云cce 部署nacos 2.3.0 集群模式
  • sqlilabs第四十九五十关
  • Laravel 使用rdkafka_laravel详细教程(实操避坑)
  • Google上架:2024年一月政策限制之 AI 生成的内容
  • 【动态规划】【 数学】C++算法:514自由之路
  • [SpringBoot]接口的多实现:选择性注入SpringBoot接口的实现类
  • 求幸存数之和 - 华为OD统一考试
  • [译] 怎样写一个基础的编译器
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • js对象的深浅拷贝
  • js算法-归并排序(merge_sort)
  • Linux Process Manage
  • PV统计优化设计
  • React-生命周期杂记
  • socket.io+express实现聊天室的思考(三)
  • spring boot 整合mybatis 无法输出sql的问题
  • 反思总结然后整装待发
  • 关于字符编码你应该知道的事情
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端之React实战:创建跨平台的项目架构
  • 异步
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​插件化DPI在商用WIFI中的价值
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C语言)二分查找 超详细
  • (二)linux使用docker容器运行mysql
  • (三分钟)速览传统边缘检测算子
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net Signalr 使用笔记
  • .net 简单实现MD5
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET性能优化(文摘)
  • ::before和::after 常见的用法
  • @Autowired注解的实现原理
  • @staticmethod和@classmethod的作用与区别
  • [C#]扩展方法
  • [c++] 什么是平凡类型,标准布局类型,POD类型,聚合体
  • [C++基础]-入门知识