nginx和CDN应用

news2024/11/19 1:29:27

一、代理的工作机制

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

二、代理服务器的概念

代理服务器是一个位于客户端和原始(资源)服务器之间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求并指定目标原始服务器,然后代理服务器向原始服务器转交请求并将获得的内容返回给客户端。

缓存代理对于Web至关重要,尤其对于大型高负载Web站点。缓存可作为性能优化的一个重要手段,可以极大减轻后端服务器的负载。通常对于静态资源,即较少经常更新的资源,如图片,css或js等进行缓存,从而在每次刷新浏览器的时候,不用重新请求,而是从缓存里面读取,这样就可以减轻服务器的压力。

三、代理服务器的作用

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

四、常用的代理服务器

squid、nginx、varnish、CDN

CDN在云场景中  使用比较多  大量广泛使用

Squid和varnish 传统应用 用得不多

性能上Squid和varnish比较好  但是nginx的管理更加方便

五、nginx缓存代理部署

代理服务器:172.16.23.13

后端服务器:172.16.23.14           172.16.23.15

骤一:首先脚本完成三台nginx的部署

步骤二:在两个后端原始服务器上分别创建测试页面

echo 'this is web02' > /usr/local/nginx/html/test.html
vim /usr/local/nginx/conf/nginx.conf

步骤三:完成nginx缓存服务器配置文件修改

进入/usr/local/nginx
mkdir -p /data/nginx/cache


修改配置文件nginx.conf
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 172.16.23.14:80;
        server 172.16.23.15:80;
    }
    
    server {
        listen 80;
        server_name localhost;
        location / {
            proxy_cache my_cache;               #指定用于页面缓存的共享内存,zone名称由proxy_cache_path指令定义
            proxy_cache_valid 200 5m;           #为不同的响应状态码设置不同的缓存时间,此为缓存状态码为200的请求,缓存时长为5分钟
            proxy_cache_key $request_uri;       #指定缓存文件的key为请求的URI
            add_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 中后缀为 .jsp 或 .php 的设置变量值为 "no cache"
  if ($request_uri ~ \.(jsp|php)$) {
   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为请求的URI
    add_header Nginx-Cache-Status $upstream_cache_status    #把缓存状态设置为头部信息,响应给客户端
    proxy_pass http://cache_server;  #代理转发
  }
}
 
 
 
详细可参考:
https://blog.csdn.net/qq_34556414/article/details/106490874
https://blog.csdn.net/weixin_30795127/article/details/97385091#proxy_cache_path

六、CDN概念及作用

在最接近用户网络边缘的位置,增加一层CDN缓存代理服务器,将源站点的内容发布到CDN节点,可以使用户就近取得所需的内容,提高用户的访问响应速度。也避免了网络拥塞,缓解了源站点的访问压力。

CDN 内容分发网络,本质上就是一大堆遍布在全球各个角落的缓存服务器。通过与DNS 的配合,找到最靠近用户的一台CDN缓存服务器,然后把数据快速地分发给用户
通过 CDN技术,我们不仅减少了对于整体骨干网的流量负担,还提高了用户的访问速度。

6.1CDN的数据是如何获取的

  • 1、对于热点资源,一般定时做缓存预热
  • 2、对于冷门资源,如果CDN没有,会从上游服务器或源站点获取资源。在同步缓存在CDN节点中

6.2CDN工作原理

将源站点(web应用服务器)的静态网页资源缓存到CDN节点上,用户请求资源时,就近返回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,就可以实现内容加速了!

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

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

相关文章

Pygame程序的屏幕显示

不同对象的绘制与显示过程 在Pygame中,需要将所有需要在屏幕上显示的内容都绘制在一个display surface上。该Surface通常称为screen surface,它是pygame.display.set_mode()函数返回的Surface对象。 在绘制不同对象时,可以使用不同的绘制方…

四款AI写作助手推荐:提高内容创作效率与质量

随着人工智能技术的飞速发展,AI写作助手逐渐成为内容创作者的新宠。这些工具利用先进的人工智能技术,为写作者提供强大的支持,帮助他们提高创作效率和质量。本文将介绍四种受欢迎的AI写作助手:海鲸AI、Jenni AI、Writesonic和Jasp…

23年容器云部署

23年容器云部署(vmware虚拟机) 主机名IP地址master192.168.100.119node192.168.100.120 1、将安装包 chinaskills_cloud_paas_v2.1.iso 下载至 master 节点/root 目录,并解压到/opt 目 录 [rootmaster ~]# ls anaconda-ks.cfg chinaskill…

Hive数据定义(1)

hive数据定义是hive的基础知识,所包含的知识点有:数据仓库的创建、数据仓库的查询、数据仓库的修改、数据仓库的删除、表的创建、表的删除、表的修改、内部表、外部表、分区表、桶表、表的修改、视图。本篇文章先介绍:数据仓库的创建、数据仓…

Jmeter接口自动化02--JMeter的安装和使用

p02 高清B站视频链接 2.1 Windows环境 首先需要安装JDK,然后再部署JMeter。注意,JMeter对JDK的版本是有要求的,一般至少要JDK8,这也是目前开发过程中使用频繁的版本。 1. 安装JDK 从官网下载JDK:https://www.oracl…

error: undefined reference to ‘cv::imread(std::__ndk1::basic_string<char

使用android studio编译项目时,由于用到了 cv::imread()函数,编译时却报错找不到该函数的定义。 cv::imread一般是在highgui.hpp中定义,因此我加上了该头文件: #include “opencv2/highgui/highgui.hpp” 但…

开机自启动android app

Android App开机自启动_android 开机自启动-CSDN博客 注意权限问题: 第二种实现方式:系统桌面应用 问:android的系统桌面应用启动是什么: 答: Android 系统桌面应用是指用户在设备主屏幕上看到的默认启动界面&…

深入Go语言:高效基准测试与性能分析指南

基准测试 1. 编写 测试代码 基准测试在 Go 中通常是以 Benchmark 开头的函数,接受一个 *testing.B 类型的参数。这个参数提供了控制基准测试运行的方法,比如指定测试运行的次数。 func BenchmarkServer_XX(b *testing.B) {// 准备测试的 Server 实例和…

腾讯实验平台基于 StarRocks 构建湖仓底座

作者: 腾讯大数据平台部科学实验中心Tech Lead、专家工程师 马金勇博士 腾讯大数据平台部科学实验中心数据负责人、专家工程师 胡明杰 StarRocks Contributor、腾讯高级工程师 刘志行 在 2022 年,腾讯 A/B Test 团队启动了海外商业化版本 ABetterChoice …

代码随想录算法训练营第三天| LeetCode203.移除链表元素、707.设计链表、206.反转链表

文章目录 一、203. 移除链表元素感受代码 二、707.设计链表感受代码 206.反转链表感受 总结 一、203. 移除链表元素 感受 我对这道题。从理论上来说太熟悉了。咸鱼讲数据结构常用的方法他都会讲。但是我没上机没写过。到后面上机还是写不出来。giao。 代码 第一次写&#xf…

css 背景是个图片并且含有透明度的渐变色.超级简单。background相关属性就行了

底纹是个背景图片。 然后上面有个渐变色。渐变色含有透明度这样才能把底纹显示出来 不用麻烦的把图片放进去各种定位修改层级来写啦。 直接一个background相关属性就行了。 背景色怎么增加透明度呢 使用rgba的方式rgba(127,47,255,0.7)。 //0.7是透明度 background-image:li…

文心一言 VS 讯飞星火 VS chatgpt (177)-- 算法导论13.3 6题

六、用go语言,说明如果红黑树的表示中不提供父指针,应当如何有效地实现 RB-INSERT。 文心一言: 红黑树是一种自平衡的二叉搜索树,其中每个节点都包含一个颜色属性(红色或黑色),并且满足以下性…

宝塔数据库一直提示密码错误

宝塔一直提示密码错误,直接在界面上操作修改root 密码也无效的修改办法; 则修改办法是,需要到 linux终端自己修改 mysql root的密码 忘记root密码,修改密码(针对5.7版本) 其中 skip-grant-tables 加到 …

MySQL 8查询语句之查询所有字段、特定字段、去除重复字段、Where判断条件

《MySQL 8创建数据库、数据表、插入数据并且查询数据》里边有我使用到的数据。 再使用下方的语句补充一些数据: insert into Bookbought.bookuser(id,username,userphone,userage,sex,userpassword) values (11,Book Break,22245678911,18,male,good#111); insert…

基于kkFileView实现万能文件预览

基于kkFileView实现万能文件预览 1.简介 文档在线预览项目解决方案,项目使用流行的spring boot搭建,易上手和部署。万能的文件预览开源项目,基本支持主流文档格式预览 官网:https://kkview.cn/zh-cn/docs/home.html github地址…

图像分割deeplab系列

DeepLab系列是谷歌团队提出的一系列语义分割算法。DeepLab v1于2014年推出,并在PASCAL VOC2012数据集上取得了分割任务第二名的成绩,随后2017到2018年又相继推出了DeepLab v2,DeepLab v3以及DeepLab v3。DeepLab v1的两个创新点是空洞卷积&am…

西门子S7-1200直接连接MySQL数据库

最近项目上有个需求,要把采集的数据存储到数据库中,当前西门子有很多方法,必读IDB,还有通过WINCC的脚本,第三方的软件等等,但是随着发展,有些需求希望设备直接到数据库,比如云端的RD…

3D人体姿态估计

3D人体姿态估计是指通过算法对输入的图像或视频进行分析,推断出人体的三维姿态信息。该技术可以应用于许多领域,如虚拟现实、运动分析、人机交互等。 1. 算法原理: 3D人体姿态估计利用深度学习模型作为算法的核心,通过网络学习人…

redis缓存雪崩、穿透和击穿

缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机或者大量缓存集中在某一个时间段失效。缓存挂了,此时 1 秒 5000 个请求全部落数据库,…

Java常用类---日期时间类

日期时间类 Date类 简介 在Java中,Date类用来封装当前的日期和时间。Date类提供两个构造函数来初始化对象,如下所示。 通过Date() 使用当前日期和时间来初始化对象。 通过Date(long millisec) 来初始化对象,其中的参数是从1970年1月1日起…