1.浏览器发送请求数据到nginx。
2.nginx先处理请求头,后处理请求体。
client_header_buffer_size #ginx可设置客户端上传header缓冲区大小
client_body_buffer_size #nginx可设置客户端上传数据缓冲区大小
client_body_temp_path #缓冲区不够用向磁盘缓存大小
client_max_body_size #限制上传body数据大小,在用户上传时,在http头中会标记content-length大小,以此判断。
client_body_timeout #建立tcp连接后不动了的超时时间
client_header_timeout #针对header的超时时间
3.nginx在处理body请求体的过程中,可以设置client_boduy_buffer_size这个参数用来设置body缓冲区大小。
4.proxy_request_buffering:该参数设置nginx在读取body请求体过程中是否想上有服务器进行传输,设置on是等完全读到请求体后再向上游服务器发送数据,设置off则是一边读body一边向上游服务器发送数据。
5.读到数据后,根据upstream配置的服务器列表向上游服务器发送数据。
6.加入epoll事件队列,出发回调函数。发送到上游服务器。上游服务器收到请求后返回数据。
nginx接收到请求后触发epoll事件,调用回调函数处理请求。
7.nginx接收上游服务器的数据,在反向代理的网络中,nginx和上游服务器的网络很有可能是内网,网络速度快,如果上有服务器返回数据大,nginx中proxy_buffering如果设置成off,那么nginx对于上游读取到的数据完全不做缓冲,即读多少,向下游发多少,这样会造成nginx与上游服务器的tcp网络一直不能中断。
所以我们可以将proxy_buffering设置成on,那么可以将上游传输的数据缓冲到nginx中,并释放与上游服务器的tcp连接或者复用该连接,同时向下游服务器传输数据。
proxy_buffer_size #缓冲header里面的数据
proxy_buffering on; #是否将数据读取到缓冲区。
proxy_buffers 32 64k; #缓冲区32个64k的内存块
proxy_max_temp_file_size #像磁盘中写入的数据最大值,默认1G。
proxy_temp_path #写入路径
proxy_temp_file_wirte_size #向临时缓冲区写文件,每次写入大小。