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

web缓存代理服务器

一、web缓存代理

web代理的工作机制

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

 代理服务器主要作用

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

常用的代理服务器

  • 本地实现:squid、nginx、varnish
  • 云环境远端实现:CDN
  • 数据库缓存代理:Redis、Memcached

搭建web缓存代理

1、在三台服务器上部署nginx

  • 192.168.10.101
  • 192.168.10.103
  • 192.168.10.109

初始化

 systemctl disable --now firewalldsetenforce 0vim /etc/selinux/config

下载nginx的yum源安装 

[root@localhost ~]# cd /etc/yum.repos.d
[root@localhost yum.repos.d]# ls
local.repo  repos.bak
[root@localhost yum.repos.d]# ls
local.repo  nginx.repo  repos.bak
[root@localhost yum.repos.d]# yum install -y nginx

2、在后端原始服务器上创建测试页面

在192.168.10.103上创建测试页面

在192.168.10.109上创建测试页面

3、完成nginx服务器配置修改

先关闭两台测试机的长连接并重启服务

vim /etc/nginx/nginx.conf

systemctl restart nginx

 创建数据缓存目录

 mkdir /data/nginx/cache -pchown nginx:nginx /data/nginx/cache/

开启nginx缓存配置

vim /etc/nginx/nginx.conf

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

/data/nginx/cache:

这是缓存文件在文件系统中的存储路径。NGINX 将在该目录下存储缓存文件。

levels=1:2:

1:2 表示缓存文件将分两级目录存储。第一层有一个字符,第二层有两个字符。这种结构可以避免单个目录下文件过多的问题,提高文件查找效率。


keys_zone=my_cache:10m:

这定义了缓存区域的名称和大小。my_cache 是缓存区域的名称,用于在其他指令中引用该缓存。
10m 表示分配给该缓存区域的内存大小为10MB。NGINX 在内存中保存缓存项的元数据(如缓存键和过期时间),实际的缓存内容存储在磁盘上。

max_size=10g:

这定义了缓存的最大磁盘空间为10GB。当缓存达到这个大小时,NGINX 会自动删除最老的缓存项以腾出空间。

inactive=60m:

这定义了缓存项的非活动时间。60m 表示如果缓存项在60分钟内未被访问,则会被删除。
这个参数帮助清理长期不使用的缓存项。

use_temp_path=off:

这指示 NGINX 在写入缓存文件时,直接写入目标目录,而不使用临时目录。设置为 off 可以提高性能,因为省去了临时目录到目标目录的文件移动操作。

继续在nginx.conf中加入配置,定义一个上游服务器组

修改default.conf文件

vim /etc/nginx/conf.d/default.conf 

systemctl restart nginx

配置项解释:

1、proxy_cache my_cache:

该指令启用了名为 my_cache 的缓存区域。这个缓存区域在 proxy_cache_path 指令中定义。

2、proxy_cache_valid 200 60m:

该指令设置缓存时间。具体来说,它指定了 HTTP 200 响应(成功响应)的缓存时间为60分钟。

3、proxy_cache_key $request_uri:

该指令定义缓存键,用于确定缓存条目的唯一标识。

4、add_header Nginx-Cache-Status $upstream_cache_status:

该指令添加一个自定义 HTTP 头部 Nginx-Cache-Status,其值为 $upstream_cache_status。

$upstream_cache_status 是一个内置变量,用于指示缓存状态。它可以是以下值之一:

  • MISS:请求没有命中缓存。
  • BYPASS:缓存被绕过。
  • EXPIRED:缓存条目已过期,需要重新获取。
  • STALE:使用陈旧的缓存条目。
  • UPDATING:缓存条目正在更新。
  • REVALIDATED:缓存条目被重新验证。
  • HIT:请求命中缓存。

5、proxy_pass http://webservers

该指令将请求代理到上游服务器组 webservers。

webservers 已经在上述 upstream 块中定义

4、验证

在访问之前cache缓存中没有文件

cd /data/nginx/cache
ls

在网页中进行访问

第一次访问没有命中,会在缓存区生成缓存文件,之后继续访问即可直接命中 

总结:

Web缓存代理
作用:存储一些之前给访问过的,且可能要被再次访问的静态网页资源对象,使客户端可以直接从缓存代理服务器获取资源,从而减少上游源服务器的负载压力,加快网站的整体访问速度。代理服务器还可以代替客户端去获取源服务器的资源,从而隐藏客户端的真实地址。常见的Web缓存代理应用:本地实现 Nginx  Squid  Varnish云环境远端实现  CDN数据库缓存代理:Redis  MemcachedNginx 配置 缓存代理
http {......proxy_cache_path  /data/nginx/cache  levels=1:2   keys_zone=my_cache:10m       max_size=10g   inactive=60m   use_temp_path=off;
#                     缓存目录           目录层级     缓存共享内存区的名称和大小   缓存数据上限   缓存失效时间   是否存放临时文件upstream XXXX {server IP:PORT;     #定义上游源服务器的IP和端口   .....}server {listen  IP:PROT;server_name 主机名;location 匹配路径 {proxy_cache  my_cache;                                    #指定缓存共享内存区的名称proxy_cache_valid  200  60m;                              #指定有效缓存的状态码  缓存时间;proxy_cache_key $request_uri;                             #指定缓存数据的key为请求的URLadd_header Nginx_Cache_Status $upstream_cache_status      #添加请求头显示缓存状态proxy_pass http://XXXX;                                   #设置没有命令缓存时的代理转发proxy_no_cache $自定义变量;                               #通过判断自定义变量是否有值来决定是否进行缓存}	}
}

二、CDN内容分发网络

CDN概述

CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的cache(缓存)层,将网站的内容发布到最接近用户的网络“边缘”节点,使用户可以就近取得所需的内容(就近原则),提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,提高用户访问网站的响应速度。

 CDN优势

  • CDN节点解决了跨运营商和跨地域访问的问题,访问延时大大降低;
  • 大部分请求在CDN边缘节点完成,CDN起到了分流作用,减轻了源站的负载。

工作原理

将源站点(web应用服务器)的静态网页资源缓存到CDN节点上,用户请求资源时,就近返回

CDN节点上缓存的资源,而不需要每个用户的请求都从源站点获取,从而避免了网络拥塞,缓解

了源站点的压力,提高用户访问资源的速度

1、浏览器发起图片 URL请求,经过本地 DNS解析,会将域名解析权交给域名 CNAME 指向的CDN 专用 DNS 服务器。
2、CDN的DNS 服务器将 CDN的全局负载均衡设备IP 地址返回给浏览器
3、浏览器向 CDN全局负载均衡设备发起 URL 请求
4、CDN 全局负载均衡设备根据用户IP 地址,以及用户请求的 URL,选择一台用户所属区域的区域负载均衡设备,向其发起请求。
5、区域负载均衡设备会为用户选择最合适的 CDN 缓存服务器(考虑的依据包括: 服务器负载
情况,距离用户的距离等),并返回给全局负载均衡设备.
6、全局负载均衡设备将选中的 CDN 缓存服务器IP地址返回给用户。
7、用户向 CDN 缓存服务器发起请求,缓存服务器响应用户请求,最终将用户所需要偶的内容返回给浏览器。
使用 CDN 服务的网站,只需要将域名解析权交给 CDN 服务商,接着将需要分发的内容上传到CDN,就可以实现内容加速了.

CDN的内容是如何获取到的?

1)让用户直接访问资源,如果CDN有资源则可以命中缓存并直接响应返回给用户;如果没有命中到缓存则会将请求发送给上游源站点服务器获取资源,并同步到CDN的缓存中
2)对于热点资源,可以先做缓存预热,再让用户访问资源,即可命中CND中的缓存并直接响应返回给用户

相关文章:

web缓存代理服务器

一、web缓存代理 web代理的工作机制 代理服务器是一个位于客户端和原始(资源)服务器之间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求,并指定目标原始服务器,然后代理服务器向原始…...

容器:queue(队列)

以下是关于queue容器的总结 1、构造函数&#xff1a;queue [queueName] 2、添加、删除元素: push() 、pop() 3、获取队头/队尾元素&#xff1a;front()、back() 4、获取栈的大小&#xff1a;size() 5、判断栈是否为空&#xff1a;empty() #include <iostream> #include …...

探索 WebKit 的后台同步新纪元:Web Periodic Background Synchronization 深度解析

探索 WebKit 的后台同步新纪元&#xff1a;Web Periodic Background Synchronization 深度解析 随着 Web 应用逐渐成为我们日常生活中不可或缺的一部分&#xff0c;用户对应用的响应速度和可靠性有了更高的期待。Web Periodic Background Synchronization API&#xff08;周期…...

ctfshow web入门 web338--web344

web338 原型链污染 comman.js module.exports {copy:copy };function copy(object1, object2){for (let key in object2) {if (key in object2 && key in object1) {copy(object1[key], object2[key])} else {object1[key] object2[key]}}}login.js var express …...

mupdf加载PDF显示中文乱码

现象 加载PDF显示乱码,提示非嵌入字体 non-embedded font using identity encoding调式 在pdf-font.c中加载字体 调试源码发现pdf文档的字体名字居然是GBK&#xff0c;估计又是哪个windows下写的pdf生成工具生成pdf 字体方法&#xff1a; static pdf_font_desc * load_cid…...

常用的限流工具Guava RateLimiter 或Redisson RRateLimiter

在分布式系统和高并发场景中&#xff0c;限流是一个非常常见且重要的需求。以下是一些常用的限流工具和库&#xff0c;包括它们的特点和使用场景&#xff1a; 1. Guava RateLimiter Google 的 Guava 库中的 RateLimiter 是一个简单且高效的限流工具&#xff0c;适用于单节点应…...

卷积神经网络(CNN)和循环神经网络(RNN) 的区别与联系

卷积神经网络&#xff08;CNN&#xff09;和循环神经网络&#xff08;RNN&#xff09;是两种广泛应用于深度学习的神经网络架构&#xff0c;它们在设计理念和应用领域上有显著区别&#xff0c;但也存在一些联系。 ### 卷积神经网络&#xff08;CNN&#xff09; #### 主要特点…...

Unity【入门】场景切换和游戏退出及准备

1、必备知识点场景切换和游戏退出 文章目录 1、必备知识点场景切换和游戏退出1、场景切换2、鼠标隐藏锁定相关3、随机数和自带委托4、模型资源的导入1、模型由什么构成2、Unity支持的模型格式3、如何指导美术同学导出模型4、学习阶段在哪里获取模型资源 2、小项目准备工作需求分…...

Python 函数递归

以下是一个使用递归计算阶乘的 Python 函数示例 &#xff1a; 应用场景&#xff1a; 1. 动态规划问题&#xff1a;在一些需要逐步求解子问题并利用其结果的动态规划场景中&#xff0c;递归可以帮助直观地表达问题的分解和求解过程。 2. 遍历具有递归结构的数据&#xff1a;如递…...

MyBatis(27)如何配置 MyBatis 实现打印可执行的 SQL 语句

在开发过程中&#xff0c;打印可执行的SQL语句对于调试和性能优化是非常有帮助的。MyBatis提供了几种方式来实现SQL语句的打印。 1. 使用日志框架 MyBatis可以通过配置其内部使用的日志框架&#xff08;如Log4j、Logback等&#xff09;来打印SQL语句。这是最常用的方法。 Lo…...

3.js - 裁剪平面(clipIntersection:交集、并集)

看图 代码 // ts-nocheck// 引入three.js import * as THREE from three// 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls// 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js// 导入tween import …...

在5G/6G应用中实现高性能放大器的建模挑战

来源&#xff1a;Modelling Challenges for Enabling High Performance Amplifiers in 5G/6G Applications {第28届“集成电路和系统的混合设计”(Mixed Design of Integrated Circuits and Systems)国际会议论文集&#xff0c;2021年6月24日至26日&#xff0c;波兰洛迪} 本文讨…...

Perl 数据类型

Perl 数据类型 Perl 是一种功能丰富的编程语言&#xff0c;广泛应用于系统管理、网络编程、GUI 开发等领域。在 Perl 中&#xff0c;数据类型是编程的基础&#xff0c;决定了变量存储信息的方式以及可以对这些信息执行的操作。本文将详细介绍 Perl 中的主要数据类型&#xff0…...

网络协议 -- IP、ICMP、TCP、UDP字段解析

网络协议报文解析及工具使用介绍 1. 以太网帧格式及各字段作用 -------------------------------- | Destination MAC Address (48 bits) | -------------------------------- | Source MAC Address (48 bits) …...

【工具】豆瓣自动回贴软件

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 相比于之前粗糙丑陋的黑命令框版本&#xff0c;这个版本新增了UI界面&#xff0c;从此可以不需要再挨个去翻配置文件了。 另外&#xff0c;升级了隐藏浏…...

初学Spring之动态代理模式

动态代理和静态代理角色一样 动态代理的代理类是动态生成的 动态代理分为两大类&#xff1a; 基于接口的动态代理&#xff08;JDK 动态代理&#xff09;、基于类的动态代理&#xff08;cglib&#xff09; 也可以用 Java 字节码实现&#xff08;Javassist&#xff09; Prox…...

Visual studio 2023下使用 installer projects 打包C#程序并创建 CustomAction 类

Visual studio 2023下使用 installer projects 打包C#程序并创建 CustomAction 类 1 安装Visual studio 20203,并安装插件1.1 下载并安装 Visual Studio1.2 步骤二:安装 installer projects 扩展插件2 创建安装项目2.1 创建Windows安装项目2.2 新建应用程序安装文件夹2.3 添加…...

vue学习笔记(购物车小案例)

用一个简单的购物车demo来回顾一下其中需要注意的细节。 先看一下最终效果 功能&#xff1a; &#xff08;1&#xff09;全选按钮和下面的商品项的选中状态同步&#xff0c;当下面的商品全部选中时&#xff0c;全选勾选&#xff0c;反之&#xff0c;则不勾选。 &#xff08…...

昇思25天学习打卡营第19天 | RNN实现情感分类

RNN实现情感分类 概述 情感分类是自然语言处理中的经典任务&#xff0c;是典型的分类问题。本节使用MindSpore实现一个基于RNN网络的情感分类模型&#xff0c;实现如下的效果&#xff1a; 输入: This film is terrible 正确标签: Negative 预测标签: Negative输入: This fil…...

【VUE基础】VUE3第三节—核心语法之ref标签、props

ref标签 作用&#xff1a;用于注册模板引用。 用在普通DOM标签上&#xff0c;获取的是DOM节点。 用在组件标签上&#xff0c;获取的是组件实例对象。 用在普通DOM标签上&#xff1a; <template><div class"person"><h1 ref"title1">…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

高分辨率图像合成归一化流扩展

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 1 摘要 我们提出了STARFlow&#xff0c;一种基于归一化流的可扩展生成模型&#xff0c;它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流&#xff08;TARFlow&am…...

GAN模式奔溃的探讨论文综述(一)

简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...