Nginx缓存代理和CDN

一.代理的工作机制

1.代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址。

2.将获得的网页数据(静态 Web 元素)保存到缓存中并发送给客户机,以便下次请求相同的数

据时快速响应。

3.代理服务器有两种

(1)仅对网站服务器的数据做代理,减少网站服务器被访问的频率,减少网站服务器的负载压

力,提升整体用户的体验效果

 (2)把网站服务器架设在边缘网络,从而减少网络延迟

4.Web缓存代理作用

存储一些之前给访问过的,且可能要被再次访问的静态网页资源对象,使客户端可以直接从缓存代

理服务器获取资源,从而减少上游源服务器的负载压力,加快网站的整体访问速度;代理服务器还

可以代替客户端去获取源服务器的资源,从而隐藏客户端的真实地址。

二.代理服务器的概念及其主要作用

1.代理服务器的概念

代理服务器是一个位于客户端和原始(资源)服务器之间的服务器,为了从原始服务器取得内容,

客户端向代理服务器发送一个请求并指定目标原始服务器,然后代理服务器向原始服务器转交请求

并将获得的内容返回给客户端。

缓存代理对于Web至关重要,尤其对于大型高负载Web站点。缓存可作为性能优化的一个重要手

段,可以极大减轻后端服务器的负载。通常对于静态资源,即较少经常更新的资源,如图片,css

或js等进行缓存,从而在每次刷新浏览器的时候,不用重新请求,而是从缓存里面读取,这样就可

以减轻服务器的压力。

2.代理服务器的主要作用

(1)资源获取:代替客户端实现从原始服务器的资源获取;

(2)加速访问:代理服务器可能离原始服务器更近,从而起到一定的加速作用;

(3)缓存作用:代理服务器保存从原始服务器所获取的资源,从而实现客户端快速的获取;

(4)隐藏真实地址:代理服务器代替客户端去获取原始服务器资源,从而隐藏客户端真实信息。

3.常见的代理服务器

(1)常见的Web缓存代理应用:

本地实现: Nginx 、 Squid 、 Varnish                      

云环境远端实现:  CDN

数据库缓存代理:Redis  Memcached

(2)常见代理服务器之间的区别

三.Nginx 配置 缓存代理

1.常见参数

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:直接把临时文件放在缓存目录中。

2.详细配置含义

    upstream cache_server{
        server 192.168.10.20:80;
        server 192.168.10.30:80;
    }
    
    server {
        listen 80;
        server_name www.xy101.com;
        location / {
            proxy_cache my_cache;               #指定用于页面缓存的共享内存,zone名称由proxy_cache_path指令定义
            proxy_cache_valid 200 60m;          #为不同的响应状态码设置不同的缓存时间,此为缓存状态码为200的请求,缓存时长为60分钟
            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 中后缀为 .php 或 .jsp 的设置变量值为 "no cache"
  if ($request_uri ~ \.(php|jsp)$) {
   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;  #代理转发
  }
}

3.nginx 缓存代理部署

(1)初始化操作

systemctl disable --now firewalld
setenforce 0
vim /etc/sysconfig/selinux

(2)安装nginx服务

上传nginx.repo至/etc/yum.repos.d/
yum install -y nginx

 (3)准备测试界面

cd /usr/share/nginx/html
vim /test.html

照片文件自己上传
<html>     第二台虚拟机
<body>
<h1>this is test1 page</h1>
<img src="lll.jpg">
</body>
</html

<html>     第三台虚拟机
<body>
<h1>this is test2 page</h1>
<img src="lll.jpg">
</body>
</html

关闭两台服务器的长连接,重启服务器

systemctl restart nginx

(4)设置nginx缓存服务器设置(第一台服务器)

创建网页缓存的保存位置

mkdir /data/nginx/cache
chown nginx:nginx /data/nginx/cache

设置缓存服务配置

vim /etc/nginx/nginx.conf

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

upstream cache_server{
        server 192.168.10.20:80;
        server 192.168.10.30:80;
}

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

server {
    listen       80;
    server_name  www.xy101.com;

location / {     
        删除前两行配置
        proxy_cache my_cache;
        proxy_cache_valid 200 60m;
        proxy_cache_key $request_uri;
        add_header Nginx-Cache-Status $upstream_cache_status;
        proxy_pass http://webservers;

(5)网页测试

第一次访问cache_status 状态为MISS

第二次访问cache_status 状态为HIT

四.CDN概念及作用

1.CDN的介绍

CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智

能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模

块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技

术主要有内容存储和分发技术。

简而言之,就是将数据部署在各地的服务器中,通过负载均衡技术,让用户就近获取服务器中的数

据。

2.CDN 的作用

在最接近用户的网络边缘增加一层CDN缓存代理服务器,将源站点服务器的内容发布到CDN做缓

存,可以使用户就近取得所需的内容,从而提高用户访问网站的响应速度。

总结一句话为CDN能够给Web网站内容做缓存,还可降低网络延迟。

3.CDN的工作原理

先将源站点服务器的静态网页资源缓存到CDN节点上,用户请求资源时,通过与DNS的配合,再

根据用户的IP地址和请求的URL,找到最靠近用户的CDN节点,然后CDN节点会将资源数据快速

地分发给用户,使每用户的请求不需要都从源站点服务器获取。从而避免了网络拥塞,降低了源站

点服务器的负载压力,提高用户访问资源的速度和体验。

4.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,就可以实现内容加速了!

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

(1)让用户直接访问资源,如果CDN有资源则可以命中缓存并直接响应返回给用户;如果没有命

中到缓存则会将请求发送给上游源站点服务器获取资源,并同步到CDN的缓存中

(2)对于热点资源,可以先做缓存预热,再让用户访问资源,即可命中CND中的缓存并直接响应

返回给用户

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值