Nginx的缓存机制(Proxy Buffer、Proxy Cache、Proxy Store、Memcached)

Nginx的缓存机制

WEB缓存简介

Web缓存(或HTTP缓存)是用于临时存储(缓存)Web文档(如HTML页面和图像),以减少服务器延迟的一种信息技术。Web缓存系统会保存下通过这套系统的文档的副本;如果满足某些条件,则可以由缓存满足后续请求。 Web缓存系统既可以指设备,也可以指计算机程序。

Proxy Buffer

Proxy Buffer启用后,Nginx服务器会异步地将被代理服务器的响应数据传递给客户端。
Nginx服务器首先尽可能地从被代理服务器那里接收响应数据,放置在Proxy Buffer中,Buffer的大小由proxy_buffer_size指令和proxy_buffers指令决定。如果在接收过程中,发现Buffer没有足够大小来接收一次响应数据时,Nginx服务器会将部分接收到的数据临时存放在磁盘的临时文件中,磁盘上的临时文件路径由proxy_temp_path指令设置,临时文件的大小由proxy_max_temp_file_size指令和proxy_temp_file_write_size指令决定。一次响应数据被接收完成或者Buffer已经装满后,Nginx服务器开始向客户端传输数据。
每个Proxy Buffer装满数据后,在从开始向客户端发送一直到Proxy Buffer中的数据全部传输给客户端的整个过程中,它都处于BUSY状态,期间对它进行的其他操作都会失败。同时处于BUSY状态的Proxy Buffer总大小由proxy_busy_buffers_size指令限制,不能超过该指令设置的大小。
当Proxy Buffer关闭时,Nginx服务器只要接收到响应数据就会同步地传递给客户端,它本身不会读取完整的响应数据。

指令 作用
proxy_buffering on | off 是否启用Proxy Buffer功能,默认为on(开启状态)
proxy_buffers number size 接收一次被代理服务器响应数据的Proxy Buffer个数和每个Buffer的大小。number=Proxy Bufferr的个数,size=每个Buffer的大小,如:proxy_buffers 8 4k;
proxy_buffer_size size 从被代理服务器获取的第一部分响应数据的大小,该数据中一般包含了HTTP响应头,Nginx服务器通过它来获取响应数据和被代理服务器的一些必要的信息。size=缓存大小,如:proxy_buffer_size 8k;
proxy_busy_buffers_size size 限制同时处于BUSY状态的Proxy Buffer的总大小,size=处于BUSY状态的缓存区总大小,如:proxy_busy_buffers_size 8k
proxy_temp_path path [level1 [level2 [level3]]] 配置磁盘上的一个文件路径,该文件用于临时存放代理服务器的大体积响应数据,path=磁盘上存放临时文件的路径,levelN=在path变量设置的路径下第几级hash目录中存放临时文件,如:proxy_temp_path /tmp/nginx/proxy_temp 1 2,临时文件路径是/tmp/nginx/proxy_temp/1/10/00000100101
proxy_max_temp_file_size size 用于配置所有临时文件的总体积大小,存放在磁盘上的临时文件大小不能超过该配置值。size=设置临时文件总体积的上限,默认为1024MB
proxy_temp_file_write_size size 用于配置同时写入临时文件的数据量的总大小,合理设置可以避免磁盘IO负载过重,size=同时写入临时文件的数据量总大小
Proxy Cache
指令 作用
proxy_cache zone | off 配置一块公用的内存区域的名称,该区域可以存放缓存的索引数据。这些数据在Nginx服务器启动时由缓存索引重建进程负责建立,在Nginx服务器的整个运行过程中由缓存管理进程负责定时检查过期数据、检索等管理工作,zone=设置的用于存放缓存索引的内存区域的名称,off=关闭proxy_cache功能,默认设置
proxy_cache_bypass string 用于配置Nginx服务器向客户端发送响应数据时,不从缓存中获取的条件。这些条件支持使用Nginx配置的常用变量,string=条件变量,支持设置多个,当至少有一个字符串指令不为空或者不等于0时,响应数据不从缓存中获取
proxy_cache_key string 用于设置Nginx服务器在内存中为缓存数据建立索引时使用的关键字,string=设置的关键字,支持变量
proxy_cache_lock on | off 用于设置是否开启缓存的锁功能。在缓存中,某些数据项可以同时被多个请求返回的响应数据填充。开启该功能后,Nginx服务器同时只能有一个请求填充缓存中的某一数据项,这相当于给该数据项上锁,不允许其他请求操作
proxy_cache_lock_timeout time 用于设置缓存的锁功能开启以后锁的超时时间,time=设置的时间,默认为5s
proxy_cache_min_uses number 用于设置客户端请求发送的次数,当客户端向被代理服务器发送相同请求达到该指令设定的次数后,Nginx服务器才对该请求的响应数据做缓存,number=设置的次数,默认为1
proxy_cache_path path [levels=levels] keys_zone=name:size1 [inactive=time1] [max_size=size2] [loader_files=number] [loader_sleep=time2] [loader_threashold=time3] 用于设置Nginx服务器存储缓存数据的路径以及和缓存索引相关的内容,path=设置缓存数据存放的根路径,levels=设置在相对于path指定目录的第几级hash目录中缓存数据。levels=1,表示一级hash目录,levels=2,表示两级,依次类推,name:size1=Nginx服务器的缓存索引重建进程在内存中为缓存数据建立索引,这一对变量用来设置存放缓存索引的内存区域的名称和大小,time1=设置强制更新缓存数据的时间,当硬盘上的缓存数据在设定的时间内没有被访问时,Nginx服务器就强制从硬盘上将其删除,下次客户端访问该数据时重新缓存。该指令默认为10s,size2=设置硬盘中缓存数据的大小限制,number=设置缓存索引重建进程每次加载的数据元素的数量上限,time2=设置缓存索引重建进程在一次遍历结束、下次遍历开始之间的暂停时长,默认设置为50s,time3=设置遍历一次磁盘缓存源数据的时间上限,默认设置为200ms。示例:proxy_cache_path /nginx/cache/a levels=1 keys_zone=a:10m;
proxy_cache_use_stale status 用于设置一些状态,当后端被代理的服务器处于这些状态时,Nginx服务器启用该功能,status=为设置的服务器返回状态,可以是一个或者多个,这些状态有error(在建立连接、向被代理的服务器发送请求或者读取响应头时服务器发生连接错误)、timeout(在建立连接、向被代理的服务器发送请求或者读取响应头时服务器发生连接超时)、invalid_header(被代理服务器返回的响应头为空或者无效)、http_500|http_502|http_503|http_504|http_404(被代理服务器返回500、502、503、504、404状态代码)、off(无法将请求发送给被代理服务器)
proxy_cache_valid [code] time 针对不同的HTTP响应状态设置不同的缓存时间,code=设置HTTP响应状态代码,该指令可选,如果不设置,Nginx服务器只为HTTP状态代码为200、301和302的响应数据做缓存。可以使用any表示缓存所有该指令中未设置的其他响应数据,time=设置缓存时间,实例:proxy_cache_valid 200 302 10m; 对返回状态为200和302的响应数据缓存10分钟
proxy_no_cache string 用于什么时候不使用cache功能,string=一个或者多个变量,当string值不为空或者不为0时,不启用cache功能。

注意:Proxy Cache依赖于Proxy Buffer,只有在Proxy Buffer开启时才能使用Proxy Cache。

Proxy Buffer和Proxy Cache区别

Proxy Buffer:实现了被代理服务器响应数据的异步传输
Proxy Cache:实现Nginx服务器对客户端数据请求的快速响应。

Proxy Store
指令 作用
proxy_store on | off | string 是否在本地磁盘缓存来自被代理服务器的响应数据,on | off=设置是否开启Proxy Store功能,缓存文件会被存放到root或者alias指定的本地路径下,默认为off(关闭状态)
proxy_store_access users:permissions 设置用户或用户组对Proxy Store缓存的数据的访问权限,users=可以设置为user、group或者all,permission=设置权限,示例:proxy_store_access user:rw group:rw all:r;
Memcached
指令 作用
memcached_pass address memcached服务器地址,address=memcached服务器地址,支持IP+端口地址或者域名地址,也可以是upstream指令配置的一个memcached服务器组
memcached_connect_timeout time 连接memcached服务器的超时时间,time=超时时间,默认为60s
memcached_read_timeout time 指Nginx向memcached服务器发送两次read请求之间的等待超时时间,如果在该时间内没有进行数据传输,连接将会被关闭,time=超时时间,默认为60s
memcached_send_timeout time 指Nginx向memcached服务器发送两次write请求之间的等待超时时间,如果在该时间内没有进行数据传输,连接将会被关闭,time=超时时间,默认为60s
memcached_buffer_size size Nginx服务器用于接收memcached服务器响应数据的缓存区大小,size=缓存区大小,一般是内存页大小的倍数,实例:memcached_buffer_size 4k;
memcached_next_upstream status 在配置了一组memcached服务器的情况下使用。服务器组中各memcached服务器的访问规则遵循upstream指令配置的轮询规则,同时可以使用该指令配置在发生哪些异常情况时,将请求的顺次交由下一个组内服务器处理,status=为设置的memcached服务器返回状态,可以是一个或者多个,这些状态有:error(在建立连接、向memcached服务器发送请求或者读取响应头时服务器发生连接错误)、timeout(在建立连接,向memcached服务器发送请求或者读取响应头时服务器发生连接超时)、invalid_header(memcached服务器返回的响应头为空或者无效)、not_found(memcached服务器未找到对应的键/值对)、off(无法将请求发送给memcached服务器)

猜你喜欢

转载自blog.csdn.net/qq_42279077/article/details/105962149