00:00
嗨,同学们,接下来呢,我们给大家来聊一聊这个反向代理里的缓存,这是作为这个课程当中的一部分重点的内容给大家来讲解的,因为这个反向代理缓存呢,我们用的比较多,那么先简单的把它给配起来,我们先看一下效果,大家就理解这个反应代理缓存配置的这个意义了啊。呃。我们要找到咱们本机的这个站点,在做这个实验的时候呢,其实就没有必要上外网去做了啊。然后我们先起来。连一下咱们这个零幺,然后呢,现在这个NGS正常情况下应该是能访问的,然后我们再起一个这个,呃,上游服务器就是这个tomcat。我们。连一个零四。这台机器上的跑了他们K,然后把他们开起来。
01:00
Tomcat起来之后,我们先看看这个tomcat的现在的运行的效果是啥样的。这是104这台机器。8080。看一下有没有缓存什么的。啊,现在就是这个情况对吧,没有CSS的样子啊,那我们接下来把这些CSS都给它补上,让它成为一个这个正常的站点。对。这是这个CSS的这三个目录。这是站点的,呃,这个跟路径,我们直接给它传到这里。然后再访问一下看看。但是你的项目可能是spring boot这种其实没影响一样的啊,只要是你的这个上游服务器,它是完整的,就是CSS啊,图片这些呢,都在我们的这个完整的项目里。
02:04
那么接下来呢,我们看看反应代理之后,能不能给他做个缓存,也就是把这些静态的资源,像JS啊,还有这个,呃。呃,这个图片啊,给它缓存到我们的这个NG的反应代理服务器里。嗯,那接下来我们。嗯,配置一下。零幺这台机器啊,给它配个反向代理。啊,这WIN11实在是太难用了。嗯,用了这么久了,就找个东西啊,这个,尤其是这个操作简直就反人类。否,否。它这个反应代理里的缓存就是pro catch的缓存啊,在pro pass里边配置的这pro这个缓存啊,默认在这个NG的发行版里呢,就已经给我们编译进去了,所以我们不需要额外的这一系列的操作。
03:04
呃,那我们接下来啊,把这个upstream这呢,先给它最小化配置,把这些没有没啥用的呢,给它给删掉,然后现在pass。到这uptream里叫HTP对吧,在104的八零就是,然后这些没用的呢,我们也把它都给掉,然后在这呢,Proceed pass。Pass到这个HTTP2号双斜杠。我们的这个里。然后把这个location呢,我们也我们也给它给搞掉,这是在做动静分离时候,把这个静态资源我们全都给部署到咱们的这个NG服务器上了,对吧,那咱们先把它给删掉。然后接下来我们重启一下机器看看。
04:06
那这返佣代理现在我们配完了,看一下啊,101能不能代理过去。现在一切都是正常的,对吧。看一下。没问题,没有什么额外的一些投讯息,这一切都是正常的,那接下来啊,我们要做一件事,这件事就是做这个,呃,反应代理里的缓存,相当于把。我们这个上游服务器的这些资源,我们全都给它混存到pro这台机器上,把pro这台机器上,它大致的这个原理是这样的,有点像我们之前做的动静分离啊,这个动静分离呢,属于自动化的动静分离了,不需要我们再去。呃,去拷这个文件了,那如果要是咱们自己手动去做这动静分离的话,我们是不是得把这个那些静态资源全都给拷到咱们的这个NG这台机器上,对吧?如果你开了这个缓存就不需要call了,大概原理是这样的,比如说我的还是这个客户机,通过我们这个返修代理机器。
05:07
然后呢,把请求打到我们这个tomcat上。在打到tomcat上呢,他会把你所请求的一切啊,全部都给他通过反应代理以隧道的形式传递给我们的,呃,最前端的用户,那在这过程当中,反应代理服务器在这里边就可以去识别你想要请求的这个ul,然后针对于你的URL呢,给已经返回这份数据呢,做一个缓存,在之前啊给大家讲过这个东西叫缓冲区,对吧。你要区分开,就这里这张图里的所有的配置都是和这个反向代理缓冲相关的。啊,它不会落地到磁盘上,那这个落地到磁盘上呢,这才叫缓存啊,前面给大家讲的叫缓冲这个缓存啊,理解起来就比较简单了,那如果你用过N几个词,或者memory cat这种缓存的话,我们Tom cat再去访问它的后端的这个数据库的时候,比如说DB。
06:04
那他发这个circle回来,然后把结果其实可以缓存到它的本机,或者是放到这个中间的RA里,以相同的circle去reddit里去取,如果取到了呢,直接就返回结果,如果没取到呢,就去DB里去取,那这里边有一个K。这个K呢,作为唯一的标识来去读缓存和管理缓存,那如果在我们的缓存服务器里边有相应K的值,那就不再去这数据库里去取了,如果没有的话去取回来,顺便放到这个我们的这个呃,Red里,对吧?这是Tom cat去做这个呃缓存,那NG在做缓存的时候其实也是一个道理,它以URL作为key,那去上游服务器上去请求数据,拿回来之后呢,写到本机的磁盘上。那接下来如果下次再有请求的话,他会先从磁盘去找,如果找着了,那我直接把结果就返回给你了,不去Tom凯里去请求了,相当于把上游服务器这些资源全部都缓存到我们的磁盘上。
07:09
对吧,那这样就能极大的提高我们这个tomcad的这个这个访问的效率,有很多无用的请求,或者是基本上没啥变化这些资源的,就不需要他每次去请求,然后在这儿呢,我去给他设置一个在磁盘上存储的过期时间。然后他可以去自动化的过期,那一旦它过期之后,它会去上游服务器去拉一次数据,然后再去缓存到磁盘上,那这样呢,其实其实这是不是就可以呃,能够变相的做到类似于我们之前给大家做这个动静分离这种形式。自动化的去把我们把呃,这个上游服务器里边的一些资源给我们存到了NG的磁盘上,而不需要我们手动去考拉,这就自动化了,对吧?那这是最终我们想要实现的效果,那在这儿呢,我们先给它配起来,对吧。
08:03
这个请求呢,已经正常打过去了。那接下来呢,我们去配置一下,呃,它这个缓存,在配置它这个缓存的时候,有这几个可以需要配置的选项。呃,就是这个啊,第一个呢,就是在HTTP的模块呢,我们今天得去配置一个pro catch的pass,就是我们想要把上游服务器这些,呃,返回来这些资源其实就是HTR文件了啊啊这把这些这个文件或者是一些其他的资源呢,我们把它存到哪啊,存到本地的磁盘上,我们在这呢,呃,给它存到这个NGXTP上,我们先给它配置上,我们看看效果。这个配置啊,是在这个HTTP这个模块下去配置的,在这儿配。配完之后呢,呃。我们先看,我们先这个把效果跑起来,然后再给他讲这里面的意思,那下一步啊,我们需要配置这么个东西,就是process,这是在location这个模块去配置的。
09:07
这个配完之后呢,我们再加这么个东西叫这个NGS呢,它这个混缓存啊,它究竟有没有用上,这里边用到一个变量叫upstream catch sta status。给这个加上啊,全都配好之后呢,我们重启一下服务器。OK,那接下来啊,呃,我们看看这个效果。第一次访问。点一下这个。看看这个header这呢,我们刚刚加的这个header里边它写了NG catch是Miss的,现在没有命中这个缓存,那再接下来我们再刷新一下。呃,大家可以看到啊,它现在还是Miss,就代表它还是没有命中这个缓存,说明我们这现在这个缓存啊,它并没有生效啊,那这会儿呢,我们可以看一下我们这刚刚这个配置。
10:04
呃,那在这儿。我们呢,之前啊,在前边这配置的这么一个目录,首先第一个前面这个参数,这是个目录。这个目录呢,用于存放咱们的这个临时的这个静态文件的,我们先看看这个目录它有没有大家看啊,呃,这个目录呢,它默认呢,已经帮我们创建出来了,那进去看一下它有没有帮我们去缓存,诶很明显啊,现在这个目录它是空的,对不对啊,它没有缓存,也就是我们配置了,呃,Perfect catch的pass,再加上这个。呃。在location里的这个pro catch默认情况下是不生效的,对吧?由于很多网上文章,那教你这么些配置,其实呢,在这儿呢,还少了另外的一个配置,就是这个缓存的过期时间,你看现在我们所配置的仪器的东西都没有这个,呃,我们当前这个缓存这个配置时,它它的这个这个这个过期时间的这个配置,那这呢,有一个大家看啊,这有一个一的1D啊,这好像是个时间对吧,一天这是inacive。
11:12
啊,这指的是在当前这个目录下啊,这个呃,临时的文件它存多久,它并不代表我们当前这个过期时间,所以呢,需要额外的再加上一个过期时间啊才可以,这个过期时间的配置在这儿。这是pro的。这指的是什么呢?我们呃请求到上游服务器,那么我什么时候再次去请求啊,如果没有这个过期时间的话,他就每每次都去请求了,即使我们配置了这个,呃,这个缓存它也它也它实际上还是每次都向上游服务器发请求的啊,主要的原理是这儿,那这个呢,指的指的是这个存多久,那这指的是我什么时候去上游服务器去呃取数据啊,多长时间过期,现在我配的168个H啊小时。
12:06
这是一天文件能存一天,然后168个小时我们去这个,呃,请求一次,但是很明显这是有冲突的,对吧啊。我们可以在这给它搞成。呃,一个小时啊,我可以我给它每一个小时呢,去上游服务器去看一下有没有新的数据,然后呢,呃,临时文件呢,我存一天,然后保存,我们再去重启一下这个NG,然后重启完然后再看。这我再刷新。大家看,第一次是Miss,然后再次刷新。大家看这就有变化了,也就是如果你配置完这个per catch之后,它不生效,主要的原因大家能看出来是在那儿,是在那儿了吗?是在你这个,呃,过期这个请求的资源,呃过期时间这儿有可能没配对吧,如果这个不配啊,呃,它是不会生效的,那么顺便接下来啊,我们看看啊,这个虽然说我们看见啊,他已经hit到了,说明这个我们的缓存已经命中了,对吧,那缓存命中之后,那究竟它是不是从我磁盘里读的呀。
13:12
那我们可以先看看啊,我们刚刚配置的这个目录。这个目录下,诶这多了几个,呃,子目录04ABE对吧,那这每个子目录下有没有文件,我们可以用这个命令。哎,没有装上。然后再看。这是第一集的目录呢,是个位数的,第二集的目录呢,是两位数的,对吧,然后第三级目录里边呢,存了这个,呃,好多的这个最终的这个文件。那这就是我们刚刚在这个配置里,我们看一下。
14:03
在这配的levels啊,就是在这个目录下呢,我在存储这些呃,缓存的文件的时候,它怎么存这表示呢,第一级目录呢,我就用一这个这个一个字符去代替啊,然后呢,总共设置两级目录,那第二级目录呢,用两个字符去代替。对吧,啊,当然你还可以再去,这是第三级目录这么去,呃,分目录去存储的,主要也是为了这个查找和清除呢,比较方便啊,然后这个key。这个命令啊,或者这个配置,它对应的是我们下边啊这个PC。Catch里这两个相对应上,也就是我在这个location下想要使用缓存,那用哪一个这个之前配置过的缓存呢?啊这的key zone表示一个缓存的名称啊,叫text catch,那我就用它对吧,然后这儿还有一个100M,这表示在内存当中可以去使用的大小。
15:02
也就是我们的这个,呃。在这个去访问这个磁盘任务文件的时候啊,你想要你得去找这个文件,而呃,在找这个文件的时候,你是不是得有这个索引,也就是所有的这些key,它究竟它究竟存在磁盘上,它存在哪儿,这样呢,可以加速我们的访问,在这个内存当中啊,存的不是具体的文件的内容啊,可以存100兆,它存的是这些索引,也就是我们这个,呃,这些具体文件名的这个哈希值。啊,有了这个索引之后呢,可以更加快速的去找到这个具体的文件,那如果没有这个索引的话,那如果来了一个请求,那他会把这个请求再次去转化成这种哈希值,然后从这个全盘去扫描去找,对吧?那每一次都得去转一下,这个速度就比较慢了,那把已经生成好的URL和所对应的这个哈希值呢,我给它缓存到我的内存当中,那再次定位的时候,速度就会非常快啊,它不是存储真正文件用的,而是去存储我们这些P啊,帮我们去快速找文件用的。
16:06
啊,这个呢,是在磁盘上啊,Inact在磁盘上有这些文件,最长时间最长时间啊,它存储多长时间啊,然后max size,它总共能存多少,我存实际大小的这个静态文件,这是它的基本的简单的配置啊,然后在这下边呢。这个ADD header里边加了一个n catch,这是系统上的一个变量,在APP streamam里边,Catch studiOS表示我当前这个缓存有没有命中,如果有命中的话,就像我们刚刚看到这个样子,对吧?这是缓存的基本配置,那它究竟有没有用这个文件呢?那我们可以看一下。现在刷新虽然说它表示已经hit了,不光是这一个资源hit了,你看这CSS他也hit了,用的也是缓存对吧,那最简单的方式啊,我们可以呃,把这个文件先先全都给他给清了。
17:01
你看RM-RF,然后星号,你千万别加这个斜杠星号啊,这就得跑路了啊。然后现在把这个缓存全都给删了,然后我们再刷新一下。大家看这就Miss了,对吧,但Miss之后呢,按照我们的这个想法,他也会再次去请求,并且把这个文件给我们缓存下来,对吧?诶很明显这又出来了,然后再刷新又会hit了。对吧。啊,现在呢,又变成hit了,那么还有一种骚操作,就是我现在虽然已经hit了,同学们猜一下,那如果我要是把tomcat里的这个资源,我给它给删掉。那么所需要引用这些CSSJS,它还能正常显示吗?呃,也如现在我们这些是propa从tomcat里把这些JS给拉回来的,如果把tomcad这些删了,它是啥效果?
18:01
我们看一下啊。来删掉。删掉之后来我们再刷新一下。还能正常访问,屌不屌?对吧,也就是上游服务器里他没有这些资源了,已经,你看我们访问Tom cat,这是TOMCAT8080。正常情况下。这个它就是404嘛,因为我们把它给删了,但是在反应代理这儿呢,我怎么刷新它还都是有这个正常,有这个资源正常给我们显示出来的,那可能会想啊,你说304了对不对,他没传东西,我正常的啊,我我完全的清空缓存。你看不管你怎么清,它反过去是200对吧,因为我们之前学过这浏览器缓存了,反过去是200,并且有这个资源的大小了。是吧,它还是能够正常显示,就是因为它用的是本机磁盘上的缓存,而没有像Tom cat上去发这个,呃,这个这个请求,那你这会儿你看如果把缓存再给它删了。
19:05
你看他还能够拉回来吗?你猜都不用猜,肯定拉不回来了,对不对,因为那些都已经在上游服务器里,真这个真正存在的这些资源都已经没有了,是吧?啊,那这就是呃,我们在反向代理服务器里边去配这个,呃,磁盘缓存的基本配置啊,我们现在是反向代理啊,你正向代理它也可以配这个缓存啊,就是如果想要让它。呃,作为一个这个,呃,这个这个上网的网关啊。让用户通过配置代理的方式去这个上网,那我也可以在这儿去配置缓存,配置这个缓存的最大的好处其实就是相同的资源呢,我不需要再去访问两次了,也就是在这个呃,正向代理的时候。嗯。你的这个代理服务器啊,得去真正的那个上游服务器去请求,如果要是有相同的请求,比如说下载一些呃,比较大的资源文件,现在比较火热的,比如说NG这个软件包,你老请求,老有人去通过我代理服务器去请求这个软件包,那我直接把它缓存到我这个反应代理服务器里,我直接我就给你,我就不再。
20:14
这个上游服务器再去下载一次了,那这样能够提高这个访问效率,但是呢,数据一致性呢,这个不太好保证,对吧?啊,其实有很多的这个,呃,第三方的电信提供商啊,你比如说什么歌华有线啊,这种什么长城宽带他们都做了这个正向代理的缓存啊,当然他肯定不是拿NG做的正向代理啊。这种正向代理缓存能够极大的节省他们这个运营商的这个网络带宽啊,相同的我就不再去给你请求了,那只是在我们的局域网里,我我我发给你就完了,对吧?这是正向代理,反应代理都可以用这个,呃,我们这个反应代理的缓存,那这是基本的配置,那接下来呢,呃,在下节课我给大家详细讲解这个,呃,Per catch里边的一些详细的配置啊。
我来说两句