nginx高并发优化之Buffer模块配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx高并发优化之Buffer模块配置相关的知识,希望对你有一定的参考价值。

一、配置

http 
types_hash_max_size 2048;
client_header_buffer_size 4k;
client_max_body_size 8m;
client_body_buffer_size 10K;
large_client_header_buffers 4 8k;

二、说明

在接受请求时,nginx提供可以将请求数据写入请求缓存区的功能。这些缓存区的数据可以作为Nginx的变量使用。
缓存区大小与请求的数据大小相比,若小于请求的数据,则将数据写入磁盘文件中。如果buffer太小,Nginx会不停的写一些临时文件,这样
会导致磁盘不停的去读写。

1、client_max_body_size
默认 1M,表示客户端请求服务器最大允许大小,在“Content-Length”请求头中指定。如果请求的正文数据大于client_max_body_size,
HTTP协议会报错 413 Request Entity Too Large。就是说如果请求的正文大于client_max_body_size,一定是失败的。如果需要上传大
文件,一定要修改该值。

2、client_body_buffer_size
设置请求主体的缓冲区大小,如果请求的数据小于client_body_buffer_size直接将数据先在内存中存储。
如果请求的数据小于client_body_buffer_size直接将数据先在内存中存储。如果请求的值大于client_body_buffer_size小于
client_max_body_size,就会将数据先存储到临时文件中,默认该路径值是/tmp/,可以由client_body_temp 手动设置,记得给Nginx的
用户组设置读写权限。
如果追求效率,就设置 client_max_body_size 、client_body_buffer_size相同,这样就不会存储临时文件,直接存储在内存了。

3、client_header_buffer_size
用于设置客户端请求的请求行+请求头缓冲区大小,大部分情况1KB大小足够,不过由于一般系统分页都要大于1k,所以这里设置为分页大小
。分页大小可以用命令getconf PAGESIZE取得。
也有client_header_buffer_size超过4k的情况,但是client_header_buffer_size该值必须设置为“系统分页大小”的整倍数

4、large_client_header_buffers
该指令规定了用于读取大型客户端请求头的缓冲区的最大数量和大小。如果(请求行+请求头)的大小超过client_header_buffer_size,则以
large_client_header_buffers配置为准。
请求行(request line)的大小不能超过8k,请求头(request header)中的每一个头部字段的大小不能超过8k,总的(请求行+请求头)的大小
不能超过32k(4 * 8k)。当在默认的缓存区不足时按需分配,如果请求转入长连接则释放缓存区。

5、types_hash_max_size
types_hash_max_size影响散列表的冲突率。types_hash_max_size越大,就会消耗更多的内存,但散列key的冲突率会降低,检索速度就更
快。types_hash_max_size越小,消耗的内存就越小,但散列key的冲突率可能上升

以上是关于nginx高并发优化之Buffer模块配置的主要内容,如果未能解决你的问题,请参考以下文章

nginx高并发优化之gzip模块配置

nginx高并发优化之upstream模块设置

高并发nginx,需要注意哪些配置

nginx高并发优化之核心模块设置

高并发中nginx较优的配置

nginx高并发优化之事件驱动模块设置