1、响应头文件
Open Buffer{
#进行判断后端服务返回的响应文件是否大大于响应头大小设置
if proxy_buffer_size >= c.proxy_buffer_size:
#进行缓存,每个连接缓冲区最大数量,proxy_buffers
c.proxy_buffer_size(number,size) >> connect.hash(c.proxy_buffer_size)
else:
#存入临时文件夹
path = proxy_temp_path
#如果容量满了,不存临时目录。
if path.size if full:
sys.exit
#如果单个临时文件的大小大于后端的响应文件大小时写入临时文件
if proxy_temp_file_write_size >= c.proxy_buffer_size:
c.proxy_buffer_size >> temp.hash(c.proxy_buffer_size)
}
Close Buffer{
#同步给客户端,然后再按照proxy_buffer_size设置的大小去取接下来的头文件并直接同步给客户端。
size = proxy_buffer_size
#不管后端的响应头信息由proxy_ignore_headers控制,不写进来了。
#如果后端服务器传递响应头关闭代理缓存则直接发送给客户端,不缓存头信息。
if realserver.X-Accel-buffering = NO:
send(c)
else:
#获取头信息并发送给客户端
while True:
get.client.hearder
send(c)
#如果连接的缓冲满了就写临时,否则写缓冲里。注意proxy_busy_buffers_size参数
#也就是说不管有多大都会发送完不会无故结束。
if connect.hash(c.proxy_buffer_size) is full:
temp.hash(c.proxy_buffer_size)
else:
connect.hash(c.proxy_buffer_size)
}
#指定用于页面缓存的共享内存,off参数可以屏蔽从上层配置继承的缓存功能。
proxy_cache zone|off
#定义nginx不从缓存取响应的条件
proxy_cache_bypass string
proxy_no_cache
#定义如何生成缓存的键default:proxy_cache_key $scheme$proxy_host$request_uri;
proxy_cache_key string; key:vaule
#定义相同的请求,同时只允许一个请求发往后端,并根据proxy_cache_key往内存中写新
#条目,直接proxy_cache_lock_time超时被释放
proxy_cache_lock on |off #default off
proxy_cache_lock_timeout time #default 5s
#设置响应被缓存的最小请求次数,即至少要请求多少次才缓存
proxy_cache_min_uses number; #default 1
#设置缓存的路径和其他参数。缓存数据是保存在文件中的,缓存的键和文件名都是在代理URL上执行MD5的结果。
#levels参数定义了缓存的层次结构。
proxy_cache_path path [levels=levels] keys_zone=name:size [inactive=time] [max_size=size]
[loader_files=number] [loader_sleep=time] [loader_threshold=time];
#文件名是由urlmd5生成,
#为什么临时目录要和缓存目录放同一分区?因为被响应的请求首先是写入一个临时文件,然后再
#copy到缓存文件夹,如果是不同分区就要真正COPY,而同一分区就是重命名的操作,指一下metadata
#如果后端服务器出现状况,nginx是可以使用过期的响应缓存的。这条指令就是定义何种条件下允许开启此机制。
proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_404 | off ...;
#为不同的响应状态码设置不同的缓存时间。可以用any
proxy_cache_valid [code ....] time;
#设置与后端服务器建立连接的超时时间。应该注意这个超时一般不可能大于75秒。
proxy_connect_timeout time;
#nginx默认不会将“Date”、“Server”、“X-Pad”,和“X-Accel-...”响应头发送给客户端。proxy_hide_header指令则可以设置额外的响应头,
#这些响应头也不会发送给客户端。相反的,如果希望允许传递某些响应头给客户端,可以使用proxy_pass_header指令。
proxy_hide_header field;
#设置代理使用的HTTP协议版本。默认使用的版本是1.0,而1.1版本则推荐在使用keepalive连接时一起使用。
proxy_http_version 1.0 | 1.1
#决定当客户端在响应传输完成前就关闭连接时,nginx是否应关闭后端连接。
proxy_ignore_client_abort on | off;
#不处理后端服务器返回的指定响应头。
proxy_ignore_headers field ...;