面试宝典系列-nginx的缓冲和缓存
2018-09-14 16:16
471 查看
缓冲:用缓冲解放后端
反向代理的一个问题是代理大量用户时会增加服务器进程的性能冲击影响。在大多数情况下,可以很大程度上能通过利用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;
相关文章推荐
- Nginx系列(十四. nginx缓存)
- 面试宝典系列-MySql主从复制原理
- 面试宝典系列-explain分析sql语句执行效率
- 如何利用Nginx的缓冲、缓存优化提升性能
- 面试宝典系列-Web安全与攻击
- Nginx系列(十五. nginx清除缓存)
- 面试宝典系列-InnoDB的主键选择与优化
- 面试宝典系列-读《深入学习Redis(4):哨兵》概要
- 如何利用Nginx的缓冲、缓存优化提升性能
- 面试宝典系列-MySQL的四种事务隔离级别
- 面试宝典系列-读《深入学习Redis(2):持久化》概要
- 面试宝典系列-mysql引擎Innodb和MyISAM的区别
- 面试宝典系列-MyISAM引擎和InnoDB引擎下的索引详解
- 服务器数据库系列 - Nginx 静态文件缓存时间设置
- nginx优化缓冲缓存
- nginx系列:nginx反向缓存代理详解 推荐
- 面试宝典系列-读《深入学习Redis(3):主从复制》概要
- C/C++面试之算法系列--约瑟夫环:每隔两个循环删除数组元素,求最后删除者的下标问题
- C/C++面试之算法系列--如何实现用更少的空间表示英文字母(a ~ z)构成char A[n]字符串
- 【脚本语言系列】关于PythonWeb服务器Nginx+uWSGI,你需要知道的事