为什么80%的码农都做不了架构师?>>>
缓冲:用缓冲解放后端
反向代理的一个问题是代理大量用户时会增加服务器进程的性能冲击影响。在大多数情况下,可以很大程度上能通过利用Nginx的缓冲和缓存功能减轻。
缓冲就是nginx代理缓冲从后端服务器返回的数据,供传递给客户端。缓冲完成后nginx代理和后端服务器就可以断开连接了。解决了由于客户端性能慢而导致与后端服务器长时间连接问题,释放后台进程。
场景:从客户机到Nginx代理的连接,从Nginx代理到后端服务器的连接。
如果没有缓冲,数据从代理的后端服务器发送并立即开始被发送到客户。如果假定客户端很快,缓冲可以关闭而尽快使数据到客户端,有了缓冲,Nginx代理将暂时存储后端的响应,然后按需供给数据给客户端。如果客户端是缓慢的,允许Nginx服务器关闭到后端的连接。然后,Nginx服务器可以处理数据分配到客户端,以任何可能的速度。
Nginx默认启用缓冲,因为客户端的连接速度一般来说是差别很大的。
缓冲的配置:
# 控制本内容块下(包括子内容块)是否启用缓冲,默认为“on”
proxy_buffering on;
# 后端回复结果的首段(包含header的部分)是单独缓冲的,本条目定义这部分的缓冲区大小。
proxy_buffer_size 1k;
# 有两个参数,第一个控制缓冲区请求数量,第二个控制缓冲区大小。
proxy_buffers 24 4k;
# 设置被标记为“client-ready”(客户端就绪)的缓冲区大小。客户端一次只能从一个缓冲读取数据,而缓冲是按照队列次序被分批发送给客户端的。本条目设置的值就是这个队列的大小。
proxy_busy_buffers_size 8k;
# 每个请求可以存储临时文件的最大大小。如果上游发来的结果太大以至于无法放入一个缓冲,则Nginx会为其创建临时文件。
proxy_max_temp_file_size 2048m;
# 当上传的文件大于此值时,nginx会先将文件写入“proxy_temp_path ”缓存目录
proxy_max_temp_file_size 32k;
# 当被代理服务器的响应过大时Nginx一次性写入临时文件的数据量。
proxy_temp_file_write_size 32k;
# 定义Nginx存储临时文件的路径。
proxy_temp_path /usr/local/nginx/proxy_temp
缓存:配置代理服务缓存来减少响应时间
nginx采用一种方法来缓存从后端服务器的内容,对于许多请求无需连接到上游(后端服务器)。
缓存配置:
# 存储缓存的目录 levels=参数指定缓存将如何组织 keys_zone=参数定义缓存区域的名字 MAX_SIZE参数设置实际缓存数据的最大尺寸。
proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=backcache:8m max_size=50m;
# 将设置用于存储缓存值的键 此键用于检查是否一个请求可以从高速缓存提供服务
proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args";
# proxy_cache_valid指令可以被指定多次。它依赖于状态代码值使我们能够配置多长时间存储。下例子中,对于后端返回200和302存储10分钟,404响应的一分钟过期。
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;