web缓存代理服务器

news2025/2/24 4:21:50

一、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 firewalld
 setenforce 0
 vim /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 -p
 chown 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  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;
#                     缓存目录           目录层级     缓存共享内存区的名称和大小   缓存数据上限   缓存失效时间   是否存放临时文件

    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为请求的URL
			add_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.coloradmin.cn/o/1902288.html

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

相关文章

Python基础小知识问答系列-自定义反向迭代器

1. 问题: 现在想要一个具有反向迭代的迭代器,该怎样实现反向迭代的能力? 2. 解决方法: 首先,在自定义一个迭代器,在类中实现__reversed__方法;使用内置函数reversed实现反 向迭代。 示例&…

linux 下,Java由Java8升级到Java11,Java不更新版本号

在ES对接过程,springboot3进行对接,需要将Java升级到11版本。首先下载安装选好的11版本Java,在linux下解压后,配置/etc/profile export JAVA_HOME/root/SJL/jdk-11.0.22 然后保存,执行文件source /etc/profile&#…

【算法笔记自学】第 5 章 入门篇(3)——数学问题

5.1简单数学 #include <cstdio> #include <algorithm> using namespace std; bool cmp(int a,int b){return a>b; } void to_array(int n,int num[]){for(int i0;i<4;i){num[i]n%10;n /10;} } int to_number(int num[]){int sum0;for(int i0;i<4;i){sumsu…

BitWidget,自定义bit控件

由于QBitArray并不满足我做界面是的需求&#xff0c;所以参照QBitArray简单的写了个控件&#xff0c;如下所示&#xff0c;源码及实例在我上传的资源包中 实例 帮助文档如图所示&#xff08;部分&#xff09; 帮助文档&#xff08;在资源包中&#xff09; 1.html文档 2.chm文…

使用Python绘制和弦图

使用Python绘制和弦图 和弦图效果代码 和弦图 和弦图用于展示数据的多对多关系&#xff0c;适合用于社交网络、交通流量等领域的分析。 效果 代码 import pandas as pd import holoviews as hv from holoviews import opts hv.extension(bokeh)# 示例数据 data [(A, B, 2),…

Java对象通用比对工具

目录 背景 思路 实现 背景 前段时间的任务中&#xff0c;遇到了需要识别两个对象不同属性的场景&#xff0c;如果使用传统的一个个属性比对equals方法&#xff0c;会存在大量的重复工作&#xff0c;而且为对象新增了属性后&#xff0c;比对方法也需要同步修改&#xff0c;不方…

JUC(java.util.concurrent)中的常见类

文章目录 Callable接口ReentrantLockReentrantLock 和 synchronized 的区别:如何选择使用哪个锁? 信号量SemaphoreCountDownLatch多线程环境使用ArrayList多线程使用 哈希表相关面试题 JUC放了和多线程有关的组件 Callable接口 和Runnable一样是描述一个任务,但是有返回值,表…

查询某个县区数据,没有的数据用0补充。

加油&#xff0c;新时代打工人&#xff01; 思路&#xff1a; 先查出有数据的县区&#xff0c;用县区编码判断&#xff0c;不存在县区里的数据。然后&#xff0c;用union all进行两个SQL拼接起来。 SELECTt.regionCode,t.regionName,t.testNum,t.sampleNum,t.squareNum,t.crop…

springboot+vue+mybatis图书馆借阅管理系统+PPT+论文+讲解+售后

21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存储达到…

三分钟内了解卷轴模式

在数字化时代的浪潮中&#xff0c;卷轴商业模式巧妙地将积分体系、互动任务、社交裂变、虚拟经济体系以及个性化成长路径等多元要素融为一体。 积分体系&#xff1a;激发参与动力的源泉 卷轴商业模式的核心在于其精心构建的积分系统。新用户踏入平台&#xff0c;即获赠一笔启…

基于自编码器的时间序列异常检测方法(以传感器数据为例,MATLAB R2021b)

尽管近年来研究者对自编码器及其改进算法进行了深入研究&#xff0c;但现阶段仍存在以下问题亟须解决。 1) 无监督学习模式对特征提取能力的限制与有监督学习相比&#xff0c;无监督学习模式摆脱了对样本标签的依赖、避免了人工标注的困难&#xff0c;但也因此失去了样本标签的…

LLM - 循环神经网络(RNN)

1. RNN的关键点&#xff1a;即在处理序列数据时会有顺序的记忆。比如&#xff0c;RNN在处理一个字符串时&#xff0c;在对字母表顺序有记忆的前提下&#xff0c;处理这个字符串会更容易。就像人一样&#xff0c;读取下面第一个字符串会更容易&#xff0c;因为人对字母出现的顺序…

一站式解决方案:用ChatGPT和AutoGPT组建你的个人写作团队

ChatGPT 在 AI 内容创作领域带来了巨大的飞跃&#xff0c;然而它在撰写完整文章时偶尔会陷入废话和奇怪主题。作为专业作家、AI专家及OpenAI Beta测试人员&#xff0c;我一直探索AI写作。虽然ChatGPT表现出色&#xff0c;但有时难以达到创造高质量文章的标准。 最近&#xff0…

EtherCAT转Profinet网关配置说明第二讲:上位机软件配置

EtherCAT协议转Profinet协议网关模块&#xff08;XD-ECPNS20&#xff09;&#xff0c;不仅可以实现数据之间的通信&#xff0c;还可以实现不同系统之间的数据共享。EtherCAT协议转Profinet协议网关模块&#xff08;XD-ECPNS20&#xff09;具有高速传输的特点&#xff0c;因此通…

githup开了代理push不上去

你们好&#xff0c;我是金金金。 场景 git push出错 解决 cmd查看 git config --global http.proxy git config --global https.proxy 如果什么都没有&#xff0c;代表没设置全局代理&#xff0c;此时如果你开了代理&#xff0c;则执行如下&#xff0c;设置代理 git con…

Github:git提交代码到github

创建 GitHub 仓库 a. 登录到您的 GitHub 账户。 b. 点击右上角的 "" 图标&#xff0c;选择 "New repository"。 c. 填写仓库名称&#xff08;例如 "Mitemer"&#xff09;。 d. 添加项目描述&#xff08;可选&#xff09;。 e. 选择仓库为 &…

微信小程序的轻松音乐-计算机毕业设计源码48092

目 录 摘要 1 绪论 1.1研究背景与意义 1.2研究现状 1.3论文结构与章节安排 2 基于微信小程序的轻松音乐系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.3 系统用例分析 2.4 系统…

排序——数据结构与算法 总结8

目录 8.1 排序相关概念 8.2 插入排序 8.2.1 直接插入排序&#xff1a; 8.2.2 折半插入排序&#xff1a; 8.2.3 希尔排序&#xff1a; 8.3 交换排序 8.3.1 冒泡排序&#xff1a; 8.3.2 快速排序&#xff1a; 8.4 选择排序 8.4.1 简单选择排序 8.4.2 堆排序 8.5 归并…

C++--partition库函数

介绍 在C中&#xff0c;partition函数通常是指STL&#xff08;Standard Template Library&#xff09;中的std::partition算法&#xff0c;它用于对一个序列进行分区操作。具体来说&#xff0c;std::partition接受一个范围和一个谓词&#xff08;predicate&#xff09;作为参数…

策略为王股票软件源代码-----如何修改为自己软件73------------主界面右下角,大盘指数,时间显示 ,

IDS_MAINFRAME_SHINDEXTIP "沪:%2.f %+.2f %.2f亿" IDS_MAINFRAME_SZINDEXTIP "深:%2.f %+.2f %.2f亿" 主界面右下角,大盘指数,时间显示 , if( TIMER_TIME == nIDEvent ) { CSPTime time = CSPTime::GetCurrentTime(); …