内存及磁盘资源的分配
1.HTTP包体只存储到磁盘文件中
语法: client_body_in_file_only on|clean|off;
默认: client_body_in_file_only off;
配置块: http、server、location
当值为非
off
时,用户请求中的
HTTP
包体一律存储到磁盘文件中,即使只有
0
字节也会存
off
时,用户请求中的
HTTP
包体一律存储到磁盘文件中,即使只有
0
字节也会存
储为文件。当请求结束时,如果配置为
on
,则这个文件不会被删除(该配置一般用于调试、
on
,则这个文件不会被删除(该配置一般用于调试、
定位问题),但如果配置为
clean
,则会删除该文件
clean
,则会删除该文件
2.HTTP包体尽量写入到一个内存buffer中
语法: client_body_in_single_buffer on|off;
默认: client_body_in_single_buffer off;
配置块: http、server、location
用户请求中的
HTTP
包体一律存储到内存
buffer
中。当然,如果
HTTP
包体的大小超过了
HTTP
包体一律存储到内存
buffer
中。当然,如果
HTTP
包体的大小超过了
下面
client_body_buffer_size
设置的值,包体还是会写入到磁盘文件
client_body_buffer_size
设置的值,包体还是会写入到磁盘文件
(3)存储HTTP头部的内存buffer大小
语法: client_header_buffer_size size;
默认: client_header_buffer_size 1k;
配置块: http、server
上面配置项定义了正常情况下
Nginx
接收用户请求中
HTTP header
部分(包括
HTTP
行和
Nginx
接收用户请求中
HTTP header
部分(包括
HTTP
行和
HTTP
头部)时分配的内存
buffer
大小。有时,请求中的
HTTP header部分可能会超过这个大
头部)时分配的内存
buffer
大小。有时,请求中的
HTTP header部分可能会超过这个大
小,这时large_client_header_buffers定义的buffer将会生效
(4)存储超大HTTP头部的内存buffer大小
语法: large_client_header_buffers number size;
默认: large_client_header_buffers 48k;
配置块: http、server
large_client_header_buffers
定义了
Nginx
接收一个超大
HTTP
头部请求的
buffer
个数和每个
定义了
Nginx
接收一个超大
HTTP
头部请求的
buffer
个数和每个
buffer
的大小。如果
HTTP请求行(如GET/index HTTP/1.1)的大小超过上面的单个buffer,则
的大小。如果
HTTP请求行(如GET/index HTTP/1.1)的大小超过上面的单个buffer,则
返回“Request URI too large”(414)
。请求中一般会有许多
header
,每一个
header
的大小也不能超
。请求中一般会有许多
header
,每一个
header
的大小也不能超
过单个
buffer
的大小,否则会返回
“Bad request”(400)
。当然,请求行和请求头部的总和也不可
buffer
的大小,否则会返回
“Bad request”(400)
。当然,请求行和请求头部的总和也不可
以超过
buffer
个数
*buffer
大小。
buffer
个数
*buffer
大小。
(5)存储HTTP包体的内存buffer
大小
大小
语法: client_body_buffer_size size;
默认: client_body_buffer_size 8k/16k;
配置块: http、server、location
面配置项定义了
Nginx
接收
HTTP
包体的内存缓冲区大小。也就是说,
HTTP
包体会先
Nginx
接收
HTTP
包体的内存缓冲区大小。也就是说,
HTTP
包体会先
接收到指定的这块缓存中,之后才决定是否写入磁盘。
note:
如果用户请求中含有HTTP头部Content-Length,并且其标识的长度小于定义
的buffer大小,那么Nginx会自动降低本次请求所使用的内存buffer,以降低内存消耗。
(6)HTTP包体的临时存放目录
语法: client_body_temp_path dir-path[level1[level2[level3]]]
默认: client_body_temp_path client_body_temp;
配置块: http、server、location
上面配置项定义
HTTP
包体存放的临时目录。在接收
HTTP
包体时,如果包体的大小大于
HTTP
包体存放的临时目录。在接收
HTTP
包体时,如果包体的大小大于
client_body_buffer_size
,则会以一个递增的整数命名并存放到
client_body_temp_path
指定的目
,则会以一个递增的整数命名并存放到
client_body_temp_path
指定的目
录中。后面跟着的
level1
、
level2
、
level3
,是为了防止一个目录下的文件数量太多,从而导
level1
、
level2
、
level3
,是为了防止一个目录下的文件数量太多,从而导
致性能下降,因此使用了
level
参数,这样可以按照临时文件名最多再加三层目录。例如
level
参数,这样可以按照临时文件名最多再加三层目录。例如
client_body_temp_path
opt
nginx/client_temp 1 2;
如果新上传的
HTTP
包体使用
00000123456
作为临时文件名,就会被存放在这个目录中
HTTP
包体使用
00000123456
作为临时文件名,就会被存放在这个目录中
optnginx/client_temp/6/45/00000123456
(7)connection_pool_size
Nginx
对于每个建立成功的
TCP
连接会预先分配一个内存池
对于每个建立成功的
TCP
连接会预先分配一个内存池
语法: connection_pool_size size;
默认: connection_pool_size 256;
(8)request_pool_size
语法: request_pool_size size;
默认: request_pool_size 4k;
配置块: http、server
Nginx开始处理HTTP请求时,将会为每个请求都分配一个内存池,size配置项将指定这
个内存池的初始大小
网络连接的设置
1.时间
读取HTTP头部的超时时间
语法: reset_timeout_connection on|off;
默认: reset_timeout_connection off;
配置块: http、server、location
语法: client_header_timeout time(默认单位:秒);
默认: client_header_timeout 60;
配置块: http、server、location
如果在一个时间间 隔(超时时间)内没有读取到客户端发来的字节,则认为超时,并向客户端返回 408(“Request timed out”)响应。
读取HTTP包体的超时时间
语法: client_body_timeout time(默认单位:秒);
默认: client_body_timeout 60;
配置块: http、server、location
发送响应的超时时间
语法: send_timeout time;
默认: send_timeout 60;
配置块: http、server、location
这个超时时间是发送响应的超时时间,即
Nginx
服务器向客户端发送了数据包,但客户
Nginx
服务器向客户端发送了数据包,但客户
端一直没有去接收这个数据包。如果某个连接超过
send_timeout
定义的超时时间,那么
Nginx
send_timeout
定义的超时时间,那么
Nginx
将会关闭这个连接
关闭
reset_timeout_connection
语法: reset_timeout_connection on|off;
默认: reset_timeout_connection off;
配置块: http、server、location
连接超时后将通过向客户端发送
RST
包来直接重置连接。这个选项打开后,
Nginx
会在某
RST
包来直接重置连接。这个选项打开后,
Nginx
会在某
个连接超时后,不是使用正常情形下的四次握手关闭
TCP
连接,而是直接向用户发送
RST重
TCP
连接,而是直接向用户发送
RST重
置包,不再等待用户的应答,直接释放Nginx服务器上关于这个套接字使用的所有缓存(如
TCP
滑动窗口)。相比正常的关闭方式,它使得服务器避免产生许多处于
FIN_WAIT_1
、
滑动窗口)。相比正常的关闭方式,它使得服务器避免产生许多处于
FIN_WAIT_1
、
FIN_WAIT_2
、
TIME_WAIT
状态的
TCP
连接
、
TIME_WAIT
状态的
TCP
连接
lingering_close
语法: lingering_close off|on|always;
默认: lingering_close on;
配置块: http、server、location
该配置控制
Nginx
关闭用户连接的方式。
Nginx
关闭用户连接的方式。
always
表示关闭用户连接前必须无条件地处理连
表示关闭用户连接前必须无条件地处理连
接上所有用户发送的数据
off
表示关闭连接时完全不管连接上是否已经有准备就绪的来自用
表示关闭连接时完全不管连接上是否已经有准备就绪的来自用
户的数据。
on
是中间值,一般情况下在关闭连接前都会处理连接上的用户发送的数据,除了
是中间值,一般情况下在关闭连接前都会处理连接上的用户发送的数据,除了
有些情况下在业务上认定这之后的数据是不必要的。
lingering_time
语法: lingering_time time;
默认: lingering_time 30s;
配置块: http、server、location
Lingering_close
启用后,这个配置项对于上传大文件很有用。上文讲过,当用户请求的
启用后,这个配置项对于上传大文件很有用。上文讲过,当用户请求的
Content-Length大于max_client_body_size配置时,Nginx服务会立刻向用户发送413(Request
entity too large
)响应。但是,很多客户端可能不管
413
返回值,仍然持续不断地上传
HTTP body,这时,经过了
lingering_time
设置的时间后,
Nginx
将不管用户是否仍在上传,都会把连 接关闭掉
entity too large
)响应。但是,很多客户端可能不管
413
返回值,仍然持续不断地上传
HTTP body,这时,经过了
lingering_time
设置的时间后,
Nginx
将不管用户是否仍在上传,都会把连 接关闭掉
lingering_timeout
语法: lingering_timeout time;
默认: lingering_timeout 5s;
配置块: http、server、location
lingering_close
生效后,在关闭连接前,会检测是否有用户发送的数据到达服务器,如果
生效后,在关闭连接前,会检测是否有用户发送的数据到达服务器,如果
超过lingering_timeout时间后还没有数据可读,就直接关闭连接;否则,必须在读取完连接缓
冲区上的数据并丢弃掉后才会关闭连接
keepalive
对某些浏览器禁用keepalive功能
语法: keepalive_disable[msie6|safari|none]...
默认: keepalive_disable msie6 safari
配置块: http、server、location
HTTP
请求中的
keepalive
功能是为了让多个请求复用一个
HTTP
长连接,这个功能对服务
请求中的
keepalive
功能是为了让多个请求复用一个
HTTP
长连接,这个功能对服务
器的性能提高是很有帮助的。但有些浏览器,如
IE 6
和
Safari
,它们对于使用
keepalive
功能的
IE 6
和
Safari
,它们对于使用
keepalive
功能的
POST
请求处理有功能性问题。因此,针对
IE 6
及其早期版本、
Safari
浏览器默认是禁用
keepalive
功能的
请求处理有功能性问题。因此,针对
IE 6
及其早期版本、
Safari
浏览器默认是禁用
keepalive
功能的
keepalive超时时间
语法: keepalive_timeout time(默认单位:秒);
默认: keepalive_timeout 75;
配置块: http、server、location
一个
keepalive
连接在闲置超过一定时间后(默认的是
75
秒),服务器和浏览器都会去关
keepalive
连接在闲置超过一定时间后(默认的是
75
秒),服务器和浏览器都会去关
闭这个连接。当然,
keepalive_timeout
配置项是用来约束
Nginx
服务器的,
Nginx
也会按照规范
keepalive_timeout
配置项是用来约束
Nginx
服务器的,
Nginx
也会按照规范
把这个时间传给浏览器,但每个浏览器对待
keepalive
的策略有可能是不同的。
keepalive
的策略有可能是不同的。
一个keepalive长连接上允许承载的请求最大数
语法: keepalive_requests n;
默认: keepalive_requests 100;
配置块: http、server、location
MIME类型的设置
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式
·MIME type与文件扩展的映射
语法: type{...};
配置块: http、server、location
定义
MIME type
到文件扩展名的映射。多个扩展名可以映射到同一个
MIME type
MIME type
到文件扩展名的映射。多个扩展名可以映射到同一个
MIME type
types {
text/html html;
text/html conf;
image/gif gif;
image/jpeg jpg;
}
·默认MIME type
语法: default_type MIME-type;
默认: default_type text/plain;
配置块: http、server、location
·types_hash_bucket_size
语法: types_hash_bucket_size size;
默认: types_hash_bucket_size 32|64|128;
配置块: http、server、location
为了快速寻找到相应
MIME type
,
Nginx
使用散列表来存储
MIME type
与文件扩展名。
MIME type
,
Nginx
使用散列表来存储
MIME type
与文件扩展名。
types_hash_bucket_size
设置了每个散列桶占用的内存大小。
设置了每个散列桶占用的内存大小。
对客户端请求的限制
按HTTP方法名限制用户请求
语法: limit_except method...{...}
配置块: location
Nginx
通过
limit_except
后面指定的方法名来限制用户请求。方法名可取值包括:
GET
、
通过
limit_except
后面指定的方法名来限制用户请求。方法名可取值包括:
GET
、
HEAD
、
POST
、
PUT
、
DELETE
、
MKCOL
、
COPY
、
MOVE
、
OPTIONS
、
PROPFIND
、
、
POST
、
PUT
、
DELETE
、
MKCOL
、
COPY
、
MOVE
、
OPTIONS
、
PROPFIND
、
PROPPATCH
、
LOCK
、
UNLOCK
或者
PATCH
。例如:
、
LOCK
、
UNLOCK
或者
PATCH
。例如:
limit_except GET {
allow 192.168.1.0/32;
deny all;
}
注意,允许
GET
方法就意味着也允许
HEAD
方法。因此,上面这段代码表示的是禁止
GET
方法就意味着也允许
HEAD
方法。因此,上面这段代码表示的是禁止
GET
方法和
HEAD
方法,但其他
HTTP
方法是允许的。
方法和
HEAD
方法,但其他
HTTP
方法是允许的。
HTTP请求包体的最大值
语法: client_max_body_size size;
默认: client_max_body_size 1m;
配置块: http、server、location
浏览器在发送含有较大
HTTP
包体的请求时,其头部会有一个
Content-Length字段,
HTTP
包体的请求时,其头部会有一个
Content-Length字段,
client_max_body_size是用来限制Content-Length
所示值的大小的。因此,这个限制包体的配置
所示值的大小的。因此,这个限制包体的配置
非常有用处,因为不用等
Nginx
接收完所有的
HTTP
包体
——
这有可能消耗很长时间
——
就可
Nginx
接收完所有的
HTTP
包体
——
这有可能消耗很长时间
——
就可
以告诉用户请求过大不被接受。例如,用户试图上传一个
10GB
的文件,
Nginx
在收完包头
10GB
的文件,
Nginx
在收完包头
后,发现
Content-Length
超过
client_max_body_size
定义的值,就直接发送
413(“Request EntityToo Large”)响应给客户端。
Content-Length
超过
client_max_body_size
定义的值,就直接发送
413(“Request EntityToo Large”)响应给客户端。
对请求的限速
语法: limit_rate speed;
默认: limit_rate 0;
配置块: http、server、location、if
配置是对客户端请求限制每秒传输的字节数。s
针对不同的客户端,可以用
$limit_rate
参数执行不同的限速策略。例如:
$limit_rate
参数执行不同的限速策略。例如:
server {
if ($slow) {
set $limit_rate 4k;
}
}
limit_rate_after
语法: limit_rate_after time;
默认: limit_rate_after 1m;
配置块: http、server、location、if
此配置表示Nginx向客户端发送的响应长度超过limit_rate_after后才开始限速。例如:
limit_rate_after 1m;
limit_rate 100k;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/129626.html