00:00
呃,同学们好,那接下来呢,我们看一下NG啊,在客户端这边的一些限制。呃,这个限制的东西呢,比较多,主要还是以缓冲区为主,能配置的呢,嗯,有这些比较核心的啊,接下来给大家讲一讲。呃,在配置客户端的这些限制的时候,由于我们的这个NG啊,可以配置成呃多个虚拟主机,也就是在呃一个server下面呢,可能会有很多这个location,然后一个HTTP下呢,会有好多的server。那么它就可以,呃在既在这个location里边去做最小的配置,呃,也可以在这个server里边做包含的配置,我打开一个配置文件,大家看一下基本就明白了。呃,它可以说是一种包含关系吧,也就是你在HTP块里边配了,然后在这个server里边呢,就可以去继承啊,这个HTP块里的这个配置啊,然后在server里边如果再配的话,它就会覆盖之间的啊,当然这个这种层级关系也都存在这种呃,这种覆盖这种这种这个这个功能吧,啊我们看一下这配置文件。
01:12
这是我们的主的这个NG格的配置文件,大家看啊,这外边是这个HTTP这模块,也就是我如果要是把一些限制啊,当然之前我们这个讲的就是这节课之前我们讲的大多数都是在upstream里边或者是在location里边去配的啊。然然后这个呃,我们对客户端的限制呢,就可以去整体的去配置,就是在整个HTP这个块里边,包含下边所有的server啊,都可以去使用,共共同的配置,是在一个server里边呢,也可以去呃,针对他自己的一些这个呃个性化去做一些覆盖的这种配置啊,但是在location里边,针对不同的location里边也可以做配置,这是比较灵活的。然后在配置的时候呢,有这些可配置的选项。这都是比较常见,比较常用的,我们打开咱们上节课这张图。
02:03
我们把在图里边给大家标记出来,这边是我们的这个,嗯。客户端他发过来请求呢,在我们初始化的这个呃过程之前啊,会去检查,或者说叫校验一下客户端所做的一系列的操作,它是不是不是合理,以及我们需要对他做哪些这个预处理,比如第一个呢,就是client body buffer size,有很多配置啊,我们通过这个名称就能大致的能理解它是啥意思,对吧,但也有很多我们可能看起来啊,有一些奇异的需要给大家好好解释解释,这client body bar size,很明显这就是对于。客户端他在提交请求的时候,他body部分啊。的这个呃,缓冲区的设置啊,主要是设置缓冲区的大小。在。嗯,这个位置给大家画张图。
03:00
这是HTP模块下。HTTP模块或者是模块或者是location。啊,都可以去配。然后第一个呢,就是。Body buffer size,这是缓冲区大小啊,这比较好理解,这个缓冲缓冲区指的就是。他在提交上来之后呢,我们会在内存里边给他分配这个,呃,缓冲这个这个数据的缓冲啊,那一旦要是内存里的数据缓冲区,我们预先设置的呢,不够大的话,它就会向磁盘去写,也就会引发下边这个配置。呃。Client body tmp啊,Temp temp pass,它会向磁盘去写,它往磁盘的哪个位置去写。
04:05
我们可以去在这儿去配置,但是它默认呢,你不配的话,它也有这个位置啊。这就可以我们很明显的指明,你把这个临时文件你给我写到哪儿。放大一点。这第一个呢,这是对,呃。客户端。嗯。缓冲区。大小配置,我们在这讲的呢,再强调一下,这叫缓冲区,不是缓存,缓冲跟缓存最大的区别就在于缓冲区啊,你用完一次之后,那下用完之后结束呢,他就把这个呃,使用的这个内存里边的这些数据全部都给清除了,每次都会去循循环去使用。然后这个缓存,缓存啊,他会存在这儿,那下次还用它,就像咱们,呃,娶了个媳妇儿,每天回家看见的都是同样一个人,这叫。
05:09
缓冲还是叫缓存,这叫缓存啊,每次都一样,因为第一次呢,我搞了一个来了,那下次呢,我就不需要再把它给清除掉了,因为这样很很很没有效率嘛,对吧,那缓冲就不一样了,你每次都不每次都不一样,只是在这个呃中,在这个空间里边有一层中转的这种感觉啊,临时给你存一下而已,用完之后立即甩掉这种感觉啊,然后这个pass呢,是。在磁磁盘上的缓冲区。磁盘存储位置。磁盘缓冲。这个磁盘缓冲这个存储的位置,呃,和我们之前给他讲的那个其实也一样,它分呃很多级,最多可以分成三级目录啊,然后去存储这些文件,因为并发量比较高的时候啊,你需要缓存的文件可能也会比较多啊。
06:03
还是那个道理,你不能在一个目录下存特别特别多的文件啊,然后这个和它对应的呢,还有这个header的buffer size。这两个呢,我们就给它接到一块儿,这一个是对头,一个是对铁啊。这些都是我们可以去配置的,然后再就是这个client max body size。这个是限制,这前面这些是缓冲,你来了之后给你放在那儿对吧?啊这个呢就不太一样了,这是限制,它会限制一下客户端,你所提交上来这个包的数据最大我能支持或者是我能接受,你能有多大,你不可能给我传一个200G的东西,我还能接受吧。对吧,啊,或者我很明显的告诉你,这个文件你不能上传太大的。那这个嗯,文件大小的检查啊,同学们也可以思考一下,它是在上传完之后,我全都读完了,然后去检查一下这个文件究竟有大,有究竟有多大,还是在他上传之前就可以发现他这个文件,或者是他这个body,它究有多大。
07:14
那最好是在他没传的时候,我就能发现你已经出现问题了,对吧,我已经不能接受你,你现在这么大了。是吧,啊,你太大这个我这这我接受不了,那我就直接就拒绝你告诉你,你现在上传上来的这个body呢,太大,那怎么去检查的,他不可能是全都读了,因为这样既浪费了我们的磁盘空间,内存空间,同时呢,还浪费了网络带宽啊客户端的有无数个,但我服务器可能就一个嘛,对吧,那怎么检查的呢,它是在。用户上传的时候,这个HTP协议里边呢,呃,在协议头上啊,就自带了这个content Les,它能够标记用contents标记过整个这个,呃,这个这个请求,请求的这个内容究竟有多大,在这里边能标记请求大小。
08:08
它是通过头去检查的,不可能上传全都传完了,我再去检查,你都已经进来了,我才发现你太大了,对吧,那这会儿你可能已经受不了了是吧,然后这个呃,在配置的时候呢,我们要考虑一下我们当前的这个反向代理服务器,它有没有这种比较大的这种body的这种需求,有没有用户上传的文件它就比较大,如果你真的要是给他。嗯,默使用它这个默认值就一兆大小,那你传个照片,现在咱们这个互联网上,你拍个高清点照片都得好几兆了是吧,他可能就传不上来了,所以这这个改动一般都是我们都会调整一下啊,不然他会返回错误,它会报错啊报413。啊,如果你要给它配置成零的话,你就爱穿多大就就多大,这个我就不看你这个body究竟有多大了是吧。这是client max body size啊,这个一般来说我们会动一下,然后再看这啊,Client body timeout,还有clienterout。
09:08
一个是body,一个是header,这俩对应的是吧。呃,这timeout它指的是毒。在读这个我们的这个header或者body的时候,我等了多长时间?我还没读到。啊,然后我就设置成超时,并且给你报错,它一般来说也都是网络问题啊,比如说你他他发过一个请求来,然后正传了一半,比如说整个这个请求体里边有两个G大小,我我传上传了一个文件。然后船在中间,它不动了。啊,不是说这个整个在船的过程当中啊,它需要多长时间,那个就是呃,你上船时间了嘛,对吧,只要你动,我就不认为你time out指的是你不动了,它不活动了。
10:00
比如我给你发一个请求,这header呢,一共有呃50个字节,你发了两个字节,然后你就不动了,那这会儿我就开始计时了啊,你你再不动,那那那这个我们就timeout了,那你你再一会儿你再重新来吧,对吧,这是client的和client的这个body和header这两个这个timeout的设置啊,避免这个用户建立连接之后呢,你还没给我发请求,或者就发了这么一两个字节,然后你不动了之后呢,占用我的这个网络资源啊。要及时的中断,要快速失败啊,这这这个呃,以节省我这个这个服务器的这个网络带宽,还有这个网络连接是吧。呃。然后下下边还有这个client body in only,这个一般来说我们都不用,我就不在这儿记了,这是呃,我们一般来说在这个呃,做二次开发的时候,可能会用到一些这个,嗯,这个这个。呃,分析上的这种这种操作吧,比如想看看用户上传上的这个东西,呃,就究竟是啥,然后我想打开看一下,在这个缓冲区我再看一下,或者你在过程当中呢,做了一些处理,那这个是在用户提交上来的请求之后,他会把这个body呢,完整的写到这个磁盘缓冲区,然后。
11:19
他请求完之后,他也不删。啊,然后他下次再有用户请求过来的时候呢。还会把这个body存在磁盘里,即使他请求没有包,它也会记一个零字节大小的这么一个文件出来,所以这个你在线上服务器的时候千万不要配啊,这这容易把你这个服务器给撑炸了是吧?然后再看下边这个啊,Client body in single buffer,这个同样也同样也是跟这个我们去做调优或者二次开发有关系啊,比如说我们在N内部呢,我们想要去读取request body这么一个变量,这个request body是它的这个呃,系统变量,N系系统变量通过request body就可以读到用户提交上来这个body请求里边的这个具体的内容。
12:02
那如果说这份内容呢,我们在之前分配的这个B里边呢,分为16K,然后呢,在在好几个地儿同时存着,既在内存里存了,又在磁盘上存了,在内存里边还分了好几个区域。那在读的时候呢,它就会比较影响效率,它要找好多个地儿嘛,对吧,那如果要是在内存里边能够使用单一连续的缓冲区,那我再读取这个body这份数据的时候,速度会比较快一些啊,如果你在做二次开发的时候,这个东西呢比较有用,如果不做二次开发的时候,这个也不太需要配啊。然后这这上面了一个了是吧。就是呃,它是分这个呃,操作系统这个这个这个CPU的架构的啊,32位操作系统的默认是8K 64位是16K,这个我们可以做适当的调整啊,Buffer这块啊,可以稍微调整调整。根据你的这个业务请求,如果你是接口这一类的,全都是get请求,那你基本上就不用动它,对吧?如果有有用户需要提交,你还分辨,比如是这种表单提交,表单提交有个16K完全足够的,不管是你是呃,像一些考试系统啊,还是什么用户提交上来的一些问卷调查啊,还是这个呃,比如说我们的用户注册呀,修改密码,这种表单都非常非常的小啊,1K就够啊,16K就已经非常非常大了,你想想这个。
13:25
字节数啊,16K大小,能放好多好多的内容的啊,基本上都够用,但如果你要是有上传文件这种需求的话,你这个body的这个buffer就得考虑考虑了啊。就是如果你大于这个配置的话。啊,它会写出临时文件,同时我们这个配置呢,也可以针对于不同的location和server去单独的去配置,那你有的location呢,就可就是专门去提交这个用户上传比较大的,那我们就可以把它配的稍微大一点啊,这就比较灵活了是吧。嗯。Body in fire only,这我们讲了a body in single buffer。
14:04
啊,这个我们讲了,然后这这个呃,ER b size。Header buffer size这个我们也讲了是吧?啊这里边呢,Header的buffer size还有另外一个可以跟大家提一下,就是如果要是有一些特别长的header请求,特别大的header请求,这个是很有可能会出现的,比如说你在请求的时候,这个URL巨长无比。啊,那你已经这个非常非常大了,呃,那这个就它就会启用另外一块缓冲区叫呃,Largege clienter buffer size,它就不往这个原有的header header buffer里边去写了,它就直接往这边去写了,啊有一些特殊情况可能会造成header比较大,比如说你的这个header里边配置的。呃,内容比较多啊,然后这个你配了几百个hi点在客户端这,然后一块提交上来,这当然也是有这个特殊需求的时候啊,一般来说正常正常情况下都不这么干,正常情况下是够的啊,即使它不够呢,还可以有一个8K的可以用。
15:03
啊,如果你明显的知道你的这个harder里边呢,包含的内容过多啊。啊,那你就可以去调整一下呃,Buffer sizeer的buffer size,或者是这个啊rge这个这个这个这这个buffer size啊这是对。客户端请求的一些限制和缓冲啊,在这个配置的时候呢,一般来说不需要动,但如果你要知道了有这些可以配的时候,那也可以做一些这个简单的调整啊,这是客户端,那我们这节课呢,就讲到这儿啊。
我来说两句