proxy / upstream 的 cache 和 buffer
参考:https://blog.csdn.net/dengjiexian123/article/details/53386586
配置示例:
http { proxy_cache_path /data/nginx_cache/ levels=1:2 keys_zone=my_zone:10m inactive=300s max_size=5g; server { proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 2 4k; proxy_busy_buffers_size 4k; proxy_temp_path /tmp/nginx_proxy_tmp 1 2; proxy_max_tmp_file_size 20m; proxy_temp_file_write_size 8k; location / { proxy_cache my_zone; } } }
proxy_buffering on;
说明:on 时,web的数据写入buffer;off 时,proxy_buffers,proxy_busy_buffers_size 失效
原理:
请求过程 :当客户端 --> 代理 --> web
响应过程:web --> 代理(web数据会写入 buffer,当buffer被写满,则数据写入temp_file中) --> 客户端
proxy_buffer_size 4k;
说明:设置 特殊的 buffer 大小。
原理:
响应过程:web --> 代理(获取web的第一部分的响应数据 【 header 】保存到该 buffer 中 ,如果设置太小会出现 502,是因为这部分的 buffer 不够存储 header 信息) --> 客户端
proxy_buffers 8 4k;
说明: 8 表示 buffer 的个数,每个buffer 的容量为 4K
原理:
响应过程:web --> 代理(web的数据存入 buffer【 buffer个数 × buffer 大小 】)
proxy_busy_buffer_size 16k;
说明:buffer 的容量大小
原理:
响应过程:web --> 代理 (该 buffer 的数据是传给客户端的 ) --> 客户端
proxy_temp_path 1 2
语法: proxy_temp_path path [ level1 | level2 | level3 ] 用来定义proxy临时 文件存在的目录及层次。
示例:proxy_temp_path /Application/nginx/proxy_temp 1 2; # 其中 /Application/nginx/proxy_temp为临时文件所在,在该目录下,1 表示在层级1目录下创建的目录名称为数字(0-9),2表示层级 2 的目录为2个数字(00-99)
proxy_max_temp_file_size 100m;
说明:临时文件的总大小
proxy_temp_file_write_size 16k;
说明:同时写入临时文件的数量总大小。
proxy_cache
语法:proxy_cahe zone|off
原理:
响应过程:web --> 代理 (根据预设的规则将曾经获取的 web 数据缓存起来,当客户端请求时,直接将缓存的数据返回。) --> 客户端
proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
说明:什么情况下的请求不读取cache,而是直接从后端的服务器上获取资源。$cookie_nocache $arg_nocache $arg_comment; 这些变量值只要任何一个变为0或不为空时,则响应的数据从后端的web上获取。
proxy_no_cache
说明:什么情况下不缓存。
实例:proxy_no_cache $cookie_nocache $arg_nocache$arg_comment; # 这些变量值只要任何一个变为0或不为空时,不缓存数据。
proxy_cache_key
设置cache key。一般不用设置
proxy_cache_path
语法:proxy_cache_path path [levels=levels] key_zone=name:size [inactive=time] [max_size=size]
说明:path 设置数据存放的路径。
leves 设置目录层级,如levels=1:2 ,表示有两级目录,第一个目录取md5倒数第一个值,第二个目录取md5值的第2和第3个值
keys_zone 设置内存zone的名字和大小
inactive 设置硬盘上缓存的数据在该时间内没有被访问过,就会删除。默认 10s
max_size 设置:硬盘上最多可以缓存多少数据,当到达该数值,则删除最少访问的数据。
实例:proxy_cache_path /data/nginx_cache/ levels=1:2 keys_zone=my_zone:10m inactive=300s max_size=5g