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中的缓存并直接响应返回给用户

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

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

相关文章

【NTN 卫星通信】Starlink基于终端用户的测量以及测试概述

1 概述 收集了一些starlink的资料,是基于终端侧部署在野外的一些测试以及测量结果。 2 低地球轨道卫星网络概述 低地球轨道卫星网络(lsn)被认为是即将到来的6G中真正实现全球覆盖的关键基础设施。本文介绍了我们对Starlink端到端网络特征的初步测量结果和观测结果&…

win11自动删除文件的问题,安全中心提示

win11自动删除文件的问题,解决方法: 1.点击任务栏上的开始图标,在显示的应用中,点击打开设置。 或者点击电脑右下角的开始也可以 2.点击设置。也可以按Wini打开设置窗口。 3.左侧点击隐私和安全性,右侧点击Windows安全…

尚品汇-(十四)

(1)提交git 商品后台管理到此已经完成,我们可以把项目提交到公共的环境,原来使用svn,现在使用git 首先在本地创建ssh key; 命令:ssh-keygen -t rsa -C "your_emailyouremail.com" I…

【SVN的使用-源代码管理工具-命令行的使用 Objective-C语言】

一、接下来,我们来说一个终端的命令行的使用, 1.我们说,你的电脑里边呢,有终端, 在Mac里边,你想新建一个txt,应该怎么写,对,打开文本编辑, 打开这个东西,写点儿东西,然后保存一下,保存的时候,你还要去选择格式, 现在,如果我们用命令行,可以更方便一些, 2.首…

数据结构(其一)--基础知识篇

1. 数据结构三要素 1.1 数据结构的运算 即,增删改查 1.2 数据结构的存储结构 2. 数据类型,抽象数据类型 数据类型: (1). 原子类型:bool、int... (2). 结构类型:类、…

【vue组件库搭建06】组件库构建及npm发包

一、格式化目录结构 根据以下图片搭建组件库目录 index.js作为入口文件,将所有组件引入,并注册组件名称 import { EButton } from "./Button"; export * from "./Button"; import { ECard } from "./Card"; export * fr…

ubuntu常用命令

常用命令 netstatpsps -auxps -eLf netstat netstat -tunlp这个命令用来显示网络连接、路由表和网络接口统计信息。 Proto (协议): 显示连接使用的协议,通常是 “tcp” 或 “udp”。 Recv-Q (接收队列): 表示接收缓冲区中未被进程读取的数据包数量。一般情况下&am…

qt6 通过http查询天气的实现

步骤如下: cmakelist 当中,增加如下配置 引入包 访问远端api 解析返回的数据 cmakelist 当中,增加如下配置,作用是引入Network库。 引入包 3、访问远端api void Form1::on_pushButton_clicked() {//根据URL(http://t.weather.…

【Linux】在线求助命令--help,man page , info page

我们知道Linux有很多的命令,那LInux要不要背命令? 答案是背最常用的那些就行了 那有的时候我们想查询一些命令的详细用法该怎么办呢? 这里我给出3种方法 1.--help --help的使用方法很简单啊 要查询的命令 --help 我们看个例子 这里我只…

利用 Hexo 搭建个人博客

〇、前言 本文将会讨论,如何将 CSDN 上的博客,拉取到本地,然后PicGo、Hexo、Github 等工具建立个人博客,环境为 Ubuntu 20.04。 一、利用 Hexo 预备工作 首先安装 Node.js、npm、git工具。 > node -v v12.22.9 > npm -…

计算组的妙用!!页面权限控制

需求描述: 某些特殊的场景下,针对某页看板,需要进行数据权限卡控,但是又不能对全部的数据进行RLS处理,这种情况下可以利用计算组来解决这个需求。 实际场景 事实表包含产品维度和销售维度 两个维度属于同一公司下面的…

方向导数和梯度

方向导数和梯度 1 导数的回忆2 偏导数及其向量形式偏导数的几何意义偏导数的向量形式 3 方向导数向量形式几何意义方向导数和偏导的关系 4 梯度5 梯度下降算法 1 导数的回忆 导数的几何意义如图所示: 当 P 0 P_{0} P0​点不断接近 P P P时,导数如下定义…

Springboot学习之用EasyExcel4导入导出数据(基于MyBatisPlus)

一、POM依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><m…

Feign-未完成

Feign Java中如何实现接口调用&#xff1f;即如何发起http请求 前三种方式比较麻烦&#xff0c;在发起请求前&#xff0c;需要将Java对象进行序列化转为json格式的数据&#xff0c;才能发送&#xff0c;然后进行响应时&#xff0c;还需要把json数据进行反序列化成java对象。 …

短信验证码实现

一、设置AccessKey 创建用户并配置使用权限&#xff0c;使我们拥有调用 aliyunAPI 的权限&#xff0c;之后会生成 AccessKeyID 和 AccessKey密码&#xff0c;后面我们会使用到。需要注意的是 AccessKeyID 和 AccessKey密码生成后我们需要将他保存起来&#xff0c;否则后期无法查…

multisim中关于74ls192n和DSWPK开关仿真图分析(减法计数器)

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

如何监控和分析 PostgreSQL 中的查询执行计划?

文章目录 一、为什么监控和分析查询执行计划很重要二、PostgreSQL 中用于获取查询执行计划的方法三、理解查询执行计划的关键元素四、通过示例分析查询执行计划五、优化查询执行计划的常见策略六、使用工具辅助分析七、结合实际案例的详细分析八、总结 在 PostgreSQL 数据库中&…

nginx的匹配及重定向

一、nginx的匹配&#xff1a; nginx中location的优先级和匹配方式&#xff1a; 1.精确匹配&#xff1a;location / 对字符串进行完全匹配&#xff0c;必须完全符合 2.正则匹配&#xff1a;location ^~ ^~ 前缀匹配&#xff0c;以什么为开头 ~区分大小写的匹配 ~* 不区分…

第十四届蓝桥杯省赛C++B组G题【子串简写】题解(AC)

题目大意 给定字符串 s s s&#xff0c;字符 a , b a, b a,b&#xff0c;问字符串 s s s 中有多少个 a a a 开头 b b b 结尾的子串。 解题思路 20pts 使用二重循环枚举左端点和右端点&#xff0c;判断是否为 a a a 开头 b b b 结尾的字符串&#xff0c;是则答案加一…

【74CH160组成60进制0-59】2021-11-22

缘由60进制计数 到达60后显示ff-嵌入式-CSDN问答 缘由《数电》用两片74160接成29进制计数器应该怎么接呢&#xff1f;-嵌入式-CSDN问答