精华内容
下载资源
问答
  • 2021-12-10 17:59:22

    代码已经关联到github: 链接地址 文章有更新也会优先在这,觉得不错可以顺手点个star,这里会持续分享自己的开发经验(:

    浏览器缓存

    浏览器再次发送请求时:

    1. 首先判断强缓存,强缓存生效直接使用强缓存(200 from memory、from disk 先从内存,再从硬盘)
    2. 如果强缓存不生效会判断
      1. 没有设置协商缓存就直接重新请求(200)
      2. 设置了协商缓存则由服务器判断缓存是否失效,没有失效就继续使用缓存(304,同强缓存的获取方式),失效则返回新的文件(200)

    缓存分类

    强缓存

    强缓存主要由响应消息头 Cache-ControlExpires 两个 Header 决定的,在一定时间内不向后端请求,直接使用内存或者磁盘内的缓存内容,前者的优先级更高。

    Cache-Control: max-age=31536000 //缓存时间 | no-store:禁止本地缓存 | no-cache:本地缓存,但是强制每次请求直接发送给源服务器,由服务器判断是否使用缓存
    Cache-Control: private;max-age=31536000 //默认是public 允许代理
    Expires: Wed, 21 Oct 2020 07:28:00 GMT //该时间之后请求过期 Cache-control 优先级比 Expires 优先级高
    

    注意请求头的消息头也可以设置Cache-Control , 表示客户端想要的缓存策略是什么。

    一般不经常变动的JS和CSS均会有一个很大的过期时间,搭配上版本号进行缓存策略,减少向后端的请求,如果均不设置只带版本号也可以,因为浏览器自动有缓存的策略。

    有些时候,我们会看到Cache-Control: max-age=31536000,那么浏览器帧的会缓存这个数据到一年吗,答案当然是否定的,设置这个值只是因为它是协议允许的最大值,浏览器不会缓存那么久,当缓存满了会优先删除旧的内容,但是CDN会,这样可以减少服务器的压力。

    协商缓存

    If-none-match/ETagsIf-Modified-Since/Last-Modified 参数决定,通常在强缓存失效后,向服务端通信,服务端确定是否使用缓存,前者优先级更高。

    • ETags 是服务器资源的一个唯一标识,请求响应时消息头会带上这个唯一标识,请求头带上上次请求返回的etag(If-none-match ),由服务器判断资源是否改变。
    • 请求响应时时消息头会带上上次修改时间(Last-Modified),请求时消息头会带上这个修改时间(If-Modified-Since ),由服务器判断资源是否改变。

    对于频繁变动的资源,服务器端需设置Cache-Control: no-cache 使浏览器每次都请求服务器,且增加返回请求头 ETag 或者 Last-Modified 来验证资源是否有效。这样的做法虽然不能节省请求数量,但是能显著减少响应数据大小。

    版本号

    • revving 技术 : 不频繁更新的文件会使用特定的命名方式:在 URL 后面(通常是文件名后面)会加上版本号。

    Service Work

    一个服务器与浏览器之间的中间人角色,如果网站中注册了service worker那么它可以拦截当前网站所有的请求,进行判断(需要编写相应的判断程序),如果需要向服务器发起请求的就转给服务器,如果可以直接使用缓存的就直接返回缓存不再转给服务器。

    简单使用

    Service Worker是浏览器在后台独立于网页运行的、用JavaScript编写的脚本。
    让我们来看看最小的Service Worker长什么样,以及怎么跑起来:

    // 不起眼的一行if,除了防止报错之外,也无意间解释了PWA的P:
    // 如果浏览器不支持Service Worker,那就当什么都没有发生过
    if ('serviceWorker' in navigator) {
        window.addEventListener('load', function () {
            // 所以Service Worker只是一个挂在navigator对象上的HTML5 API而已
            // scope 参数是可选的,可以用来指定你想让 service worker 控制的内容的子目录。 在这个例子里,我们指定了 '/',表示 根网域下的所有内容。这也是默认值。 
            navigator.serviceWorker.register('/service-worker.js', {scope: './'}).then(function (registration) {
                console.log('我注册成功了');
            }, function (err) {
                console.log('我注册失败了');
            });
        });
    }
    

    复制代码以上代码,在load事件触发后,下载并注册了service-worker.js这个文件,Service Worker的逻辑,就写在这里:

    // service-worker.js
    // 虽然可以在里边为所欲为地写任何js代码,或者也可以什么都不写,
    // 都不妨碍这是一个Service Worker,但还是举一个微小的例子:
    
    //监听安装事件,install 事件一般是被用来设置你的浏览器的离线缓存逻辑
    this.addEventListener('install', function(event) {
      //通过这个方法可以防止缓存未完成,就关闭serviceWorker
      event.waitUntil(
        //caches api: https://developer.mozilla.org/zh-CN/docs/Web/API/CacheStorage
        caches.open('v1').then(function(cache) {
          //指定要缓存的内容,地址为相对于跟域名的访问路径
          return cache.addAll([
            '/sw-test/',
            '/sw-test/index.html',
            '/sw-test/style.css',
            '/sw-test/app.js',
            '/sw-test/image-list.js',
            '/sw-test/star-wars-logo.jpg',
            '/sw-test/gallery/bountyHunters.jpg',
            '/sw-test/gallery/myLittleVader.jpg',
            '/sw-test/gallery/snowTroopers.jpg'
          ]);
        })
      );
    });
    
    //监听fetch,拦截请求
    this.addEventListener('fetch', function(event) {
      var response;
      
        event.respondWith(
        caches.match(event.request).then(function(response) {
          if (response) {
            console.log('Found response in cache:', response);
    
            return response;
          }
          console.log('No response found in cache. About to fetch from network...');
    
          return fetch(event.request).then(function(response) {
            console.log('Response from network is:', response);
            caches.open('v1').then(function(cache) {
              cache.put(event.request, response);
            });
        		return response.clone();
            
          }).catch(function(error) {
            console.error('Fetching failed:', error);
            throw error;
          });
        })
      );
      
    });
    
    
    
    应用
    1. 缓存静态资源,Service Worker的一大应用是可以利用CacheStorage API来缓存js、css、字体、图片等静态文件。我们可以在Service Worker的install阶段,指定需要缓存的具体文件,在fetch事件的回调函数中,检查请求的url,如果匹配了已缓存的资源,则不再从服务端获取,以此达到提升网页性能的目的。
    2. 离线体验,将整个页面缓存下来,比如404页面。

    详细见:Service Worker 从入门到出门

    缓存的位置

    缓存主要有4种:Service WorkerMemory CacheDisk CachePush Cache

    • Service Worker
    • Memory Cache,内存中的缓存,主要包含的是当前中页面中已经抓取到的资源(一般是小资源),例如页面上已经下载的样式、脚本、图片等,读取速度快,但是持续时间短,一般页面关闭就被释放。
    • Disk Cache,存储在硬盘中的缓存,能缓存各种资源,读取速度比内存慢,但是能缓存的数据多。
    • Push Cache,推送缓存是 HTTP/2 中的内容,当以上三种缓存都没有命中时,它才会被使用。它只在会话(Session)中存在,一旦会话结束就被释放。

    刷新对于缓存的影响

    1. 当ctrl+f5强制刷新网页时,直接从服务器加载,跳过强缓存和协商缓存。
    2. 当f5刷新网页时,跳过强缓存,但是会检查协商缓存。
    3. 浏览器地址栏中写入URL,回车 浏览器发现缓存中有这个文件了,不用继续请求了,直接去缓存拿。

    参考

    Service Worker 从入门到出门
    浏览器帧的会缓存一年吗

    DNS 缓存

    有DNS的地方,就有缓存。浏览器、操作系统、Local DNS、根域名服务器,它们都会对DNS结果做一定程度的缓存:

    • 首先查找浏览器自身的缓存
    • 然后是本机hosts,如果还是没有,则查找本地DNS服务器
    • 本地DNS服务器一般是动态分配的或者我们自己指定的地址(当然这里还有个路由器的缓存)
    • 再查找不到,则向根服务器发送递归查找,边缘DNS > 顶级DNS > 二级DNS > 三级DNS(也就是网站注册的)

    CDN缓存

    在浏览器本地缓存失效后,浏览器会向CDN边缘节点发起请求。类似浏览器缓存,CDN边缘节点也存在着一套缓存机制。CDN边缘节点缓存策略因服务商不同而不同,但一般都会遵循http标准协议,通过http响应头中的Cache-control判断资源是否过期
    其优势是:

    1. CDN节点解决了跨运营商和跨地域访问的问题,访问延时大大降低。
    2. 大部分请求在CDN边缘节点完成,CDN起到了分流作用,减轻了源服务器的负载。
    更多相关内容
  • 缓存 1. 缓存理解 缓存定义: 1. 浏览器在本地磁盘上将用户之前请求的数据存储起来,当访问者再次需要改数据的 时候无需再次发送请求,直接从浏览器本地获取数据 ... 减轻服务器压力(少买几台服务器) ...

    缓存

    1. 缓存理解

     缓存定义:
           1. 浏览器在本地磁盘上将用户之前请求的数据存储起来,当访问者再次需要改数据的
           时候无需再次发送请求,直接从浏览器本地获取数据
    

    2.缓存的好处:

               1. 减少请求的个数
               2. 节省带宽,避免浪费不必要的网络资源
               3. 减轻服务器压力(少买几台服务器)
               4. 提高浏览器网页的加载速度,提高用户体验
    

    3. 缓存分类

    1. 强缓存
           1. 不会向服务器发送请求,直接从本地缓存中获取数据
           2. 请求资源的的状态码为: 200 ok(from memory cache)
    
    2. 协商缓存
           1. 向服务器发送请求,服务器会根据请求头的资源判断是否命中协商缓存
           2. 如果命中,则返回304状态码通知浏览器从缓存中读取资源
    
    3. 强缓存 & 协商缓存的共同点
           1. 都是从浏览器端读取资源
    
    4. 强缓存 VS 协商缓存的不同点
           1. 强缓存不发请求给服务器
    	   2. 协商缓存发请求给服务器,根据服务器返回的信息决定是否使用缓存
    

    3. 缓存使用示意图

    4. 缓存中的header参数

    1、强缓存的header参数


    1. expires:

    • 这是http1.0时的规范;它的值为一个绝对时间的GMT格式的时间字符串,如Mon, 10 Jun 2015 21:31:12 GMT,如果发送请求的时间在expires之前,那么本地缓存始终有效,否则就会发送请求到服务器来获取资源

    2. cache-control:max-age=number

    • 这是http1.1时出现的header信息,是从expires发展过来的,主要是利用该字段的max-age值来进行判断它是一个相对值;资源第一次的请求时间和Cache-Control设定的有效期,计算出一个资源过期时间,再拿这个过期时间跟当前的请求时间比较,如果请求时间在过期时间之前,就能命中缓存,否则就不行;

      cache-control其他常用的值:

        1. no-cache: 不使用本地缓存,需要使用协商缓存。先与服务器确认返回的响应是否被更改,如果之前的响应中存在Etag,那么请求的额时候会与服务器端进行验证,如果资源为被更改则使用缓存。
        2. no-store: 直接禁止游览器缓存数据,每次用户请求该资源,都会向服务器发送一个请求,每次都会下载完整的资源。
        3. public:可以被所有的用户缓存,包括终端用户和CDN等中间代理服务器。
        4. private:只能被终端用户的浏览器缓存,不允许CDN等中继缓存服务器对其缓存。
      

      注意: 当cache-control与Expires共存的时候cache-control的优先级高

    2、协商缓存的header参数


    重点:协商缓存都是由服务器来确定缓存资源是否可用的,所以客户端与服务器端要通过某种标识来进行通信,从而让服务器判断请求资源是否可以缓存访问

    • Last-Modified/If-Modified-Since:二者的值都是GMT格式的时间字符串

      1. 浏览器第一次跟服务器请求一个资源,服务器在返回这个资源的同时,在respone的header加上Last-Modified的header,这个header表示这个资源在服务器上的最后修改时间
      2. 浏览器再次跟服务器请求这个资源时,在request的header上加上If-Modified-Since的header,这个header的值就是上一次请求时返回的Last-Modified的值
      3. 服务器再次收到资源请求时,根据浏览器传过来If-Modified-Since和资源在服务器上的最后修改时间判断资源是否有变化,如果没有变化则返回304 Not Modified,但是不会返回资源内容;如果有变化,就正常返回资源内容。当服务器返回304 Not Modified的响应时,response header中不会再添加Last-Modified的header,因为既然资源没有变化,那么Last-Modified也就不会改变,这是服务器返回304时的response header
      4. 浏览器收到304的响应后,就会从缓存中加载资源
      5. 如果协商缓存没有命中,浏览器直接从服务器加载资源时,Last-Modified的Header在重新加载的时候会被更新,下次请求时,If-Modified-Since会启用上次返回的Last-Modified值

    • Etag/If-None-Match(是从Last-Modified/If-Modified-Since发展过来的)
      1. 这两个值是由服务器生成的每个资源的唯一标识字符串,只要资源有变化就这个值就会改变
      2. 其判断过程与Last-Modified/If-Modified-Since类似

    • 既生Last-Modified何生Etag
      1. HTTP1.1中Etag的出现主要是为了解决几个Last-Modified比较难解决的问题
      2. 一些文件也许会周期性的更改,但是他的内容并不改变(仅仅改变的修改时间),这个时候我们并不希望客户端认为这个文件被修改了,而重新GET
      3. 某些文件修改非常频繁,比如在秒以下的时间内进行修改,(比方说1s内修改了N次),If-Modified-Since能检查到的粒度是s级的,这种修改无法判断(或者说UNIX记录MTIME只能精确到秒);
      4. 某些服务器不能精确的得到文件的最后修改时间。

    小结:

    • 利用Etag能够更加准确的控制缓存,因为Etag是服务器自动生成或者由开发者生成的对应资源在服务器端的唯一标识符。

    • Last-Modified与ETag是可以一起使用的,服务器会优先验证ETag,一致的情况下,才会继续比对Last-Modified,最后才决定是否返回304。

    5. 强缓存如何重新加载新的资源

    • 通过更新页面中引用的资源路径,让浏览器主动放弃加载缓存去加载新的资源
    • 示例:https://www.baidu.com/s?t=7aec0h3KB3Ba8lAbuyPg0AC0eDa59IvtDSmtMQBc6eW
    • 好处:
      • 每次文件改变后query的值就会发生修改,当query值不同的时候也就是页面引用的资源路径不同。此时浏览器会主动加载新的资源
    展开全文
  • 000,000 QPS,使用二进制搜索技术/《 VPCS架构》德塔公司开源缓存服务器存储上亿级量子碎片,带有并发映射表的微型Java线程小型安全HTTP json高速缓存服务器,并发映射表,2分法字符串索引,高并发安全,超时验证。...
  • 构建主域名服务器 yum install -y bind vim /etc/named.conf 修改IP地址为本机IP 修改运行访问者为any vim /etc/named. rfc1912.zones 加入上图命令 cd /var/named cp -p named.localhost named.local cp -p ...

    注意:各系统防火墙和selinux要关闭或开通53号端口

    构建主域名服务器
    yum install -y bind
    vim /etc/named.conf
    修改IP地址为本机IP
    修改IP地址为本机IP
    在这里插入图片描述
    修改运行访问者为any
    vim /etc/named. rfc1912.zones
    在这里插入图片描述
    加入上图命令
    cd /var/named
    cp -p named.localhost named.local
    cp -p named.localhost 192.168.100.arpa
    vim named.local
    在这里插入图片描述
    最后添加域名映射
    vim 192.168.100.arpa
    在这里插入图片描述
    添加反向解析配置,NX和MX后都是主域名服务器主机名,网址最后注意加**“.”**
    检查语法错误:
    named-checkconf -z /etc/named.conf在这里插入图片描述
    确认无误
    启动:systemctl start named
    在这里插入图片描述
    验证:将默认DNS服务器改为192.168.100.10
    地址;控制面板/网络和internet/网络和共享中心/更改适配器选项/属性/ipv4
    在这里插入图片描述

    发现自己设置的域名可以ping通,正向解析、反向解析也没有问题
    d) 构建从域名服务器
    另选一台同网段centos7虚拟机,
    yum install bind
    vim /etc/named.conf
    在这里插入图片描述
    vim /etc/named.rfc1912.zones,加入下面命令

    zone “local.com” IN {
    type slave;
    masters {192.168.100.10;};
    file “slaves/local.com.zone”;
    };
    zone “100.168.192.in-addr.arpa” IN {
    type slave;
    masters {192.168.100.10;};
    file “slaves/192.168.100.arpa”;
    };

    checkconf -z /etc/named.conf
    systemctl start named
    验证:
    进入主服务器
    可以等一会儿方便从域名服务器从主域名服务器下载文件
    systemctl stop named,
    进入win10,确认DNS服务器备用为192.168.100.55
    nslookup www.baidu,com 192.168.100.55
    nslookup 1.1.1.1 192.168.100.55
    发现正反向解析都可以,即配置成功
    e) 构建缓存域名服务器
    默认服务即是使用了缓存域名服务器
    可以更改默认域名解析调用位置
    vim /etc/named.conf
    在这里插入图片描述
    把该命令加入option{ };中,其中180.76.76.76是提供DNS解析的国内服务器,可根据所在地随意更改运营商的DNS
    http://www.360doc.com/content/14/0512/19/12591668_377033922.shtml
    内含各地DNS服务IP地址
    验证:
    在这里插入图片描述

    一、 DNS系统作用:解析域名
    正向解析:根据主机名称查找对应IP地址
    反向解析;根据IP地址查找对应主机域名
    解析优先级:浏览器缓存>hosts文件>本机系统缓存>本地DNS缓存>本地DNS服务器>ISP(运营商DNS服务器)>根服务器(全世界13台)
    DNS系统分布式数据结构
    在这里插入图片描述
    二、 DNS系统类型
    主域名服务器:特定DNS区域的官方服务器,具有唯一性,负责维护该区域所有域名(IP地址的映射记录)
    从域名服务器:也称为辅助域名服务器,其维护的域名来源于主域名服务器
    缓存域名服务器:也称高速缓存服务器,通过向其它域名服务器查询获得域名,将查询结果保存到本地,提高重复查询时的速度
    三、 BIND(Berkeley Internet name Daemon) 伯克利域名服务
    安装BIND软件 yum -y install bind

    1. 程序
      运行程序:/usr/sbin/named
      默认监听端口:53
    2. 主配置文件:/etc/named.conf
      a) 全局配置:named.conf
      options {
      listen-on port 53 { 192.168.100.10; }; 监听地址和端口
      directory “/var/named”; 区域数据文件默认存放位置
      allow-query { any; }; 允许使用本DNS服务的网段
      除数据文件存放位置,其它都可省略,不指定listen-on即监听所有接口UDP53端口监听服务,不指定网段默认响应所有客户机查询请求
      b) 区域配置:named.conf中include后目录
      zone “local.com” IN { #声明为正向解析
      type master; #类型为主域名服务器
      file “named.local”; #区域配置文件名“
      allow-transfer{ 192.168.100.10; }; #允许从域名服务 器192.168.100.10下载数据
      };
      zone “100.168.192.in-addr.arpa” IN { #声明为反向解析,解析服务网段为192.168.100.0/24
      type master;
      file “192.168.100.arpa”; #区域配置文件为“192.168.100.arpa”这个文件
      };
    3. 语法检查:
      named-checkconf 检测主配置文件语法错误
      named-checkconf -z /etc/named.conf检测主配置文件和区域配置文件语法错误
      根据提示修正错误,文件没找到可cd /var/named
      cp -p named.localhost 192.168.100.arpa(区域数据文件名)
      详细信息查询:man named.conf
    4. 区域数据配置文件/var/named
      a) 每个区域数据文件对应一个DNS解析区域
      根区域数据文件可以从www.internic.net/下载,列出了所有根服务器的域名和IP地址
      b) 区域配置文件内容
      正向解析:
      $TTL 1D #设置默认生存周期
      @ IN SOA local.com. admin.local.com. ( #SOA标记、域名、管理邮箱
      0 ; serial #更新序列号,可以是10为以内的整数
      1D ; refresh #刷新时间,重新下载地址数据的间隔
      1H ; retry #重试延时,下载失败后的重试间隔
      1W ; expire #失效时间,超过该时间仍无法下载放弃
      3H ) ; minimum #无效解析记录的生存周期
      #地址解析记录部分
      NS ns1.local.com #前方@可省略,留一个制表位或空格
      后方ns1.local.com为主机名
      MX 10 ns1.local.com #10表示优先级,数字越大,优先级越低
      nsl A 192.168.100.10 #A地址:记录正向解析条目
      默认时间单位为秒,M(分)、H(时)、W(周)、D(天)
      NS域名服务器:记录当前区域的DNS服务器的主机地址
      MX邮件交换:记录当前区域邮件服务器主机地址
      反向解析:
      10 IN PTR www.local.com.
      55 IN PTR mail.local.com.
      第一列指明对应IP地址主机地址部分,第三列为PTR,第四列为域名
    展开全文
  • 先来说一下缓存的优点 减少了冗余的数据传递,节省宽带流量 减少了服务器的负担,大大提高了网站性能 加快了客户端加载网页的速度 这也正是HTTP缓存属于客户端缓存的原因 ...no-cache:需要协商缓存验证数据 no-store
  • uuidcachenodejs 小型UUID缓存服务器,用于大于1.7.9的身份验证播放器。 必须修改您的服务器jar,以将其用作身份验证服务器。 出于安全原因和DCMA问题,我无法共享1.4.7 mcpc jar /代码。 这项服务适用。
  • 第三章 管理DNS和DNS服务器--使用Unbound配置缓存名称服务器

    RH358管理DNS和DNS服务器–使用Unbound配置缓存名称服务器

    本章节介绍使用unbound软件配置缓存DNS。虽说配置DNS方面还是在windows server上部署更加方便,但难免出现日后需要使用的场景,还是需要学习。

    专栏地址:https://blog.csdn.net/qq_41765918/category_11532281.html


    DNS服务器软件:bind,powerdns,dnsmasq,unbound,coredns

    1. 安装和配置Unbound

    缓存名称服务器将DNS查询结果存储在本地缓存中,并在它们的ttl过期时从缓存中删除资源记录。通常设置缓存名称服务器以代表本地网络上的客户端执行查询。这大大提高了DNS名称解析的效率,减少DNS流量在互联网上。随着缓存的增长,DNS性能会随着缓存名称服务器从其本地缓存响应越来越多的客户端查询而提高。有几个包可用于配置缓存名称服务器,包括bind、dnsmasq和unbound。在本节中,将学习如何安装、配置和管理Unbound,这是一个启用了DNSSEC验证的更安全的缓存名称服务器。

    安装unbound

    要将unbound配置为缓存名称服务器,请确保已安装unbound包:

    [root@host ~]# yum install unbound

    编辑unbound配置文件

    以root用户编辑/etc/unbound/unbound.conf文件,如下所示:

    • 在server子句中,定义Unbound将侦听的网络接口。
    interface: 192.0.2.100
    interface: 2001:db8:1001::f0
    

    默认情况下,Unbound只侦听本地主机网络接口。要允许远程客户端使用Unbound作为缓存名称服务器,请使用/etc/unbound/unbound.conf中server子句中的interface选项来指定要侦听的网络接口。您可以指定多个接口指令。

    重要:

    如果将interface设置为0.0.0.0或::0(侦听所有网络接口),则必须将interface-automatic设置为yes。否则,将interface-automatic设置为no。

    如果libvirtd服务与Unbound运行在同一台机器上,并且试图绑定到所有接口,Unbound可能不会启动。这是因为,默认情况下,Libvirtd在连接到其虚拟网络的本地接口的53端口(UDP和TCP的DNS服务器端口)上运行dnsmasq

    • 允许或阻止客户端访问。

    默认情况下,unbound拒绝来自除localhost以外的所有客户机的递归查询。在/etc/unbound/unbound .conf的server子句中,使用access-control选项来指定哪些客户端可以进行递归查询。可以指定网络地址或IP地址,匹配最多的将获胜。最有用的三种设置是allow,,允许访问,refuse,阻止访问并向客户端发送DNS拒绝错误,deny,阻止访问并根本不发送响应,

    access-control: 172.25.0.0/24 allow
    access-control: 2001:db8:1001::/32 allow
    access-control: 10.0.0.0/8 refuse
    

    重要:

    配置一个access-control来禁止除您的目标客户端以外的主机使用缓存名称服务器的递归。如果你允许互联网上的任何主机使用你的服务器进行递归查询,它可以被攻击者用来对第三方执行DNS放大分布式拒绝服务攻击(DDOS)。

    • 将查询转发到另一个缓存名称服务器(可选)。

    如果此名称服务器不能访问internet,但可以访问能够访问internet的名称服务器,则可能需要这样做。也可以这样做,将内部域的查询直接发送到该域的权威名称服务器。

    在/etc/unbound/unbound.conf中,创建forward-zone子句来指定要转发的域和要转发查询的DNS服务器。设置name值为“.”转发所有查询。使用forward-host选项通过主机名指定转发区域的DNS服务器,或使用forward-addr选项通过IP地址指定转发区域的DNS服务器。

    forward-zone:
      name: "."
      forward-addr: 172.25.254.254
    
    • 禁用特定未签名区域的DNSSEC****验证(可选)。

    默认情况下,unbound对接收到的所有DNS响应进行DNSSEC验证。通常希望它这样做,但有时会有一个未正确签名的内部域,因此无法通过DNSSEC验证。

    /etc/unbound/unbound.conf的server子句中的domain-insecure选项指定了需要跳过DNSSEC验证的域。

    domain-insecure: example.com
    

    警告:不要仅仅为了解决DNS解析中未解释的问题而禁用DNSSEC验证。DNSSEC失败可能表明正在接收被正确拒绝的欺骗响应。

    • 保存配置文件/etc/unbound/unbound.conf。

    生成私钥和服务器证书。

    [root@host ~]# unbound-control-setup
    setup in directory /etc/unbound
    generating unbound_server.key
    Generating RSA private key, 3072 bit long modulus (2 primes)
    ..........................................................++++
    .....++++
    e is 65537 (0x010001)
    generating unbound_control.key
    Generating RSA private key, 3072 bit long modulus (2 primes)
    ....................................++++
    ......................................++++
    e is 65537 (0x010001)
    create unbound_server.pem (self signed certificate)
    create unbound_control.pem (signed client certificate)
    Signature ok
    subject=CN = unbound-control
    Getting CA Private Key
    Setup success. Certificates created. Enable in unbound.conf file to use
    
    # 检查/etc/unbound/unbound.conf配置文件的语法错误。
    [root@host ~]# unbound-checkconf
    unbound-checkconf: no errors in /etc/unbound/unbound.conf
    

    启用缓存名称服务器

    配置防火墙允许DNS流量。如果使用firewalld,可以配置它以允许dns服务。

    [root@host ~]# firewall-cmd --permanent --add-service=dns
    success
    [root@host ~]# firewall-cmd --reload
    success
    
    # 启动并开机启用Unbound。
    [root@host ~]# systemctl enable --now unbound
    

    2. 管理Unbound

    安装了Unbound DNS服务器后,管理员有时需要操作它的缓存。unbound-control实用程序管理unbound服务器的缓存。

    转储和加载unbound缓存

    缓存名称服务器的管理员在解决DNS问题时可能需要转储缓存数据,比如那些由过时的资源记录引起的问题。转储Unbound DNS服务器的缓存,请使用unbound-control实用程序配合dump_cache子命令。

    [root@host ~]# unbound-control dump_cache
    START_RRSET_CACHE
    ;rrset 86395 1 0 3 3
    classroom.example.com. 86395 IN A 172.25.254.254
    ;rrset 86395 1 0 7 3
    example.com. 86395 IN NS classroom.example.com.
    ;rrset 86395 1 0 8 3
    example.com. 86395 IN A 172.25.254.254
    END_RRSET_CACHE
    START_MSG_CACHE
    msg example.com. IN A 33152 1 86395 3 1 1 1
    example.com. IN A 0
    example.com. IN NS 0
    classroom.example.com. IN A 0
    END_MSG_CACHE
    EOF
    

    使用dump_cache执行unbinding -control命令将缓存以文本格式转储到stdout。这个输出可以被定向到一个文件中进行存储,如果需要的话,可以使用unbound-control load_cache加载回缓存中。unbound-control load_cache命令从stdin读取数据来填充缓存。

    [root@host ~]# unbound-control load_cache < dump.out
    ok
    

    刷新unbound缓存

    缓存名称服务器的管理员可能还需要定期从缓存中清除过时的资源记录。缓存中的错误和过时的资源记录会阻止已改正的对应记录对客户端可用,直到资源记录上的TTL过期。与等待TTL过期不同,您可以通过对记录执行unbound-control flush来清除缓存中的过时记录:

    [root@host ~]# unbound-control flush www.example.com
    ok
    
    # 使用flush_zone子命令执行unbound-control以清除Unbound DNS服务器上属于某个域的所有资源记录。
    [root@host ~]# unbound-control flush_zone example.com
    ok removed 3 rrsets, 1 messages and 0 key entries
    

    3. 课本练习

    [student@workstation ~]$ lab dns-unbound start

    1. 安装unbound。

    [root@servera ~]# yum install unbound
    

    2. 按要求编辑server子句。

    在172.25.250.10接口上监听。
    允许来自172.25.250.0/24子网进行查询。
    免example.com区域的DNSSEC验证。
    将所有查询转发到172.25.250.254。
    
    [root@servera ~]# vim /etc/unbound/unbound.conf
    interface: 172.25.250.10
    access-control: 172.25.250.0/24 allow
    domain-insecure: "example.com"
    forward-zone:
           name: .      
           forward-addr: 172.25.250.254
    

    3. 生成私钥和服务器证书。

    [root@servera ~]# unbound-control-setup
    setup in directory /etc/unbound
    generating unbound_server.key
    Generating RSA private key, 3072 bit long modulus (2 primes)
    ...........++++
    .......++++
    e is 65537 (0x010001)
    generating unbound_control.key
    Generating RSA private key, 3072 bit long modulus (2 primes)
    ...........................................................................................................................++++
    ..............++++
    e is 65537 (0x010001)
    create unbound_server.pem (self signed certificate)
    create unbound_control.pem (signed client certificate)
    Signature ok
    subject=CN = unbound-control
    Getting CA Private Key
    Setup success. Certificates created. Enable in unbound.conf file to use
    

    4. 检查unbound配置文件的语法。

    [root@servera ~]# unbound-checkconf
    unbound-checkconf: no errors in /etc/unbound/unbound.conf
    

    5. 配置防火墙允许DNS流量。

    [root@servera ~]# firewall-cmd --permanent --add-service=dns
    success
    [root@servera ~]# firewall-cmd --reload
    success
    

    6. 启用并启动unbound服务。

    [root@servera ~]# systemctl enable --now unbound
    Created symlink /etc/systemd/system/multi-user.target.wants/unbound.service → /usr/lib/systemd/system/unbound.service.
    

    7. 通过执行查询和检查缓存的内容来验证缓存名称服务。

    [root@servera ~]# unbound-control dump_cache
    START_RRSET_CACHE
    END_RRSET_CACHE
    START_MSG_CACHE
    END_MSG_CACHE
    EOF
    
    [student@workstation ~]$ dig @servera.lab.example.com A workstation.lab.example.com
    ...........
    workstation.lab.example.com. 600 IN A 172.25.250.9
    
    [student@workstation ~]$ dig @servera.lab.example.com A servera.lab.example.com
    ............
    servera.lab.example.com. 600 IN A 172.25.250.10
    
    # 在服务器上,再次转储缓存。您应该在缓存中看到查询的记录。
    [root@servera ~]# unbound-control dump_cache
    ............
    msg workstation.lab.example.com. IN A 33152 1 587 3 1 1 1
    workstation.lab.example.com. IN A 0
    lab.example.com. IN NS 0
    bastion.lab.example.com. IN A 0
    msg net. IN DNSKEY 33152 1 78675 0 1 0 0
    net. IN DNSKEY 0
    END_MSG_CACHE
    EOF
    
    [root@servera ~]# unbound-control flush workstation.lab.example.com
    ok
    
    [root@servera ~]# unbound-control dump_cache | grep workstation
    

    完成实验

    [student@workstation ~]$ lab dns-unbound finish

    总结

    • 介绍如何安装和配置Unbound。
    • 管理Unbound。
    • 若喜欢金鱼哥的文章,顺手点个赞。也可点个关注,因为后续会不断上干货。

    展开全文
  • 使用网页登录邮箱时,有时会遇到显示服务器验证失败,这时候就可以使用支持多个入口登录的Tom企业邮箱,除了能在浏览器网页中登录,还可以绑定各种邮箱客户端,甚至是微信发送邮件。
  • DNS 测试环境中,使用 Bind9 搭建 DNS 授权服务器 和 DNS 缓存服务器
  • OpenID Connect资源服务器身份验证 Node.js的OpenID Connect资源服务器身份验证 特征 OAuth 2.0承载令牌使用情况(RFC 6750) JWT访问令牌验证(规范待定) 发行者发现(OpenID Connect发现) 动态密钥旋转...
  • 用 JSON 处理缓存

    2020-12-11 03:26:16
    在本文中,您将了解如何在服务器代码的帮助下将元数据缓存在客户端的优秀方法,服务器代码将提供 JSON(JavaScript Object Notation)形式的字符串化元数据。这种方法还允许以类似 Ajax 的方式来处理多值和多组...
  • 采用redis作为独立缓存服务器(一)

    千次阅读 2018-02-03 00:54:45
    附加工具及验证工具: centos6.5 64位 + SecureCRT6.7 + RedisDesktopManager0.8.8 二 服务器架构 三 关键代码 =======================redis参数配置====================================...
  • 如何在Linux服务器上刷新DNS缓存

    千次阅读 2021-05-12 12:29:17
    DNS是Domain Name System协议的简称,在Linux系统服务器...然而,在某些情况下,您可能想要刷新服务器的DNS缓存。这可能是因为您更改了网络上服务器的IP,并且您希望立即反映更改。在本教程中,您将学习如何在Linux...
  • 服务器验证——token

    千次阅读 2018-11-27 18:05:52
    在以前,我们常用Cookie+Session来完成服务器验证。 具体过程为在客户端提交表单登录,服务器端通过验证之后,生成一个Session对象,存放用户登录信息,并将SessionID存放到Cookie中,通过Http响应发送到客户端。...
  • 远程DNS缓存攻击

    2016-12-07 17:30:45
    远程DNS缓存攻击,包括攻击代码
  • 这允许任何访问分布式缓存的dotnet进程对客户端进行身份验证,这非常适合无服务器或负载平衡的情况,因为内存中未存储任何身份验证信息。 该演示旨在完全在docker中或在具有Cloud Run和redis Memorystore的GCP中...
  • web服务器的几种缓存

    千次阅读 2016-01-05 11:11:02
    web开发中缓存机制的种类 1.数据库缓存  我们可能听说过memcached,它就是一种数据库层面的缓存方案。数据库缓存是指,当web应用的关系比较复杂,数据库中的表很多的时候,如果频繁进行 数据库查询,很...
  • HTML 如何禁用缓存

    千次阅读 2021-10-29 22:29:09
    中间缓存服务器缓存 Web服务器缓存 以浏览器端缓存为例,浏览器将服务端响应的页面、图片、样式或是JS文件等保存在浏览器本地, 下次访问的时候直接从本地查找就可以显示, 好处是可以加快页面的展现速度,提高...
  • microproxy, 轻量级非缓存 HTTP(S) 代理服务器 microproxy 是轻量级非缓存 http/https代理服务器。的主要功能没有外部依赖关系的单个可执行文件。TOML格式的单一简单配置文件。基本和摘要访问身份验证方法。基于ip的...
  • 缓存详解

    千次阅读 2018-01-27 22:01:22
    总括: 缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,从而给自己创造了一些麻烦,本文一如既往的用通俗易懂的文字和实例来讲述缓存,希望能让您有所得。 原文博客地址: 缓存详解 知乎专栏&&简书...
  • 前端缓存详解

    千次阅读 2020-07-11 15:55:10
    HTTP 缓存分为 2 种,一种是强缓存,另一种是协商缓存。主要作用是可以加快资源获取速度,提升用户体验,减少网络传输,缓解服务端的压力。这是缓存运作的一个整体流程图: 强缓存 不需要发送请求到服务端,直接...
  • Cache-Control 通用消息头字段,被用于在http请求和响应中,通过指定指令来实现缓存机制。缓存指令是单向的,这意味着在请求中设置的指令,不一定...表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等
  • 浏览器缓存和CDN缓存基本介绍

    千次阅读 2017-10-30 09:50:33
    只有用户自己的浏览器能够进行缓存,公共的代理服务器不允许缓存。 l Cache-control: no-cache 意味着文件的内容不应当被缓存。这在搜索或者翻页结果中非常有用,因为同样的URL,对应的内容会发生变化。 ...
  • 浏览器缓存cookie与服务器缓存

    千次阅读 2016-09-30 20:39:02
    之前对缓存都是一知半解的,都是基于理论之上没有正整实际动手验证过,今天抽时间终于把缓存重新理了一片 1、 设置js 、css缓存  http头部中设置expires,Cache-Control(具体怎么设置这里就不细说),IIS服务器上设置...
  • 都要去到服务器端进行一个资源的验证, 验证如果资源可以使用,那么才会读取本地的缓存 缓存验证流程 1 ) 浏览器创建了一个请求, 首先请求到达的地方是在本地缓存, 当然是建立在有Cache-Control头的情况下 如果在...
  • 浏览器缓存机制详解

    千次阅读 2022-01-25 10:12:25
    一、为什么需要缓存 在前端开发中,我们主要追求的是性能和用户体验。对于一个网站查看性能最简单的 方式就是打开网站的速度。而一个好的缓存策略可以大大提升网站的性能。使得已经 下载后的资源被重复利用。减少...
  • HTTP系列之:HTTP缓存

    万次阅读 2021-09-01 22:10:56
    为了提高网站的访问速度和效率,我们需要设计各种各样的缓存,通过缓存可以避免不必要的额外数据传输和请求,从而提升网站的请求速度。对于HTTP协议来说,本身就自带有HTTP缓存。 今天我们就深入探讨一下HTTP中的...
  • 基于HTTP的Nginx代理配置和代理缓存

    千次阅读 2022-03-13 22:37:59
    Nginx配置代理缓存 使用proxy_cache_path来配置一个cache, 示例 proxy_cache_path cache levels=1:2 keys_...因为cache目录声明之后会用于很多代理服务器 默认所有代理会存在于一个目录中导致查找速度变慢 分级文件
  • 前端缓存看这一篇就够了

    千次阅读 2020-03-19 09:55:44
    前端缓存看这一篇就够了 缓存是什么 缓存是一种保存资源副本并在下次请求时直接使用该副本的技术。 为什么要缓存缓存的优点) 缓解服务器压力(不用每次去请求资源) 提升性能,提高访问速度(打开本地资源...
  • HTTP缓存机制详解

    千次阅读 2022-02-21 10:54:01
    HTTP缓存机制详解

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 246,333
精华内容 98,533
关键字:

服务器验证缓存