ngxin开发一个静态http服务器二

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 ngxin开发一个静态http服务器二,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

内存及磁盘资源的分配

1.HTTP包体只存储到磁盘文件中
语法: client_body_in_file_only on|clean|off;
默认: client_body_in_file_only off;
配置块: http、server、location
当值为非
off
时,用户请求中的
HTTP
包体一律存储到磁盘文件中,即使只有
0
字节也会存
储为文件。当请求结束时,如果配置为
on
,则这个文件不会被删除(该配置一般用于调试、
定位问题),但如果配置为
clean
,则会删除该文件
2.HTTP包体尽量写入到一个内存buffer
语法: client_body_in_single_buffer on|off;
默认: client_body_in_single_buffer off;
配置块: http、server、location
用户请求中的
HTTP
包体一律存储到内存
buffer
中。当然,如果
HTTP
包体的大小超过了
下面
client_body_buffer_size
设置的值,包体还是会写入到磁盘文件

(3)存储HTTP头部的内存buffer大小
语法: client_header_buffer_size size;
默认: client_header_buffer_size 1k;
配置块: http、server
上面配置项定义了正常情况下
Nginx
接收用户请求中
HTTP header
部分(包括
HTTP
行和
HTTP
头部)时分配的内存
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
个数和每个
buffer
的大小。如果
HTTP请求行(如GET/index HTTP/1.1)的大小超过上面的单个buffer,则
返回“Request URI too large”(414)
。请求中一般会有许多
header
,每一个
header
的大小也不能超
过单个
buffer
的大小,否则会返回
“Bad request”(400)
。当然,请求行和请求头部的总和也不可
以超过
buffer
个数
*buffer
大小。

(5)存储HTTP包体的内存buffer
大小
语法: client_body_buffer_size size;
默认: client_body_buffer_size 8k/16k;
配置块: http、server、location
面配置项定义了
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
包体时,如果包体的大小大于
client_body_buffer_size
,则会以一个递增的整数命名并存放到
client_body_temp_path
指定的目
录中。后面跟着的
level1

level2

level3
,是为了防止一个目录下的文件数量太多,从而导
致性能下降,因此使用了
level
参数,这样可以按照临时文件名最多再加三层目录。例如

client_body_temp_path
opt
nginx/client_temp 1 2;

如果新上传的
HTTP
包体使用
00000123456
作为临时文件名,就会被存放在这个目录中
optnginx/client_temp/6/45/00000123456
(7)connection_pool_size

Nginx
对于每个建立成功的
TCP
连接会预先分配一个内存池
语法: connection_pool_size size;
默认: connection_pool_size 256;
(8request_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
服务器向客户端发送了数据包,但客户
端一直没有去接收这个数据包。如果某个连接超过
send_timeout
定义的超时时间,那么
Nginx
将会关闭这个连接

关闭

reset_timeout_connection

语法: reset_timeout_connection on|off;
默认: reset_timeout_connection off;
配置块: http、server、location
连接超时后将通过向客户端发送
RST
包来直接重置连接。这个选项打开后,
Nginx
会在某
个连接超时后,不是使用正常情形下的四次握手关闭
TCP
连接,而是直接向用户发送
RST
置包,不再等待用户的应答,直接释放Nginx服务器上关于这个套接字使用的所有缓存(如
TCP
滑动窗口)。相比正常的关闭方式,它使得服务器避免产生许多处于
FIN_WAIT_1
FIN_WAIT_2

TIME_WAIT
状态的
TCP
连接

lingering_close

语法: lingering_close off|on|always;
默认: lingering_close on;
配置块: http、server、location
该配置控制
Nginx
关闭用户连接的方式。
always
表示关闭用户连接前必须无条件地处理连
接上所有用户发送的数据
off
表示关闭连接时完全不管连接上是否已经有准备就绪的来自用
户的数据。
on
是中间值,一般情况下在关闭连接前都会处理连接上的用户发送的数据,除了
有些情况下在业务上认定这之后的数据是不必要的。

lingering_time

语法: lingering_time time;
默认: lingering_time 30s;
配置块: http、server、location
Lingering_close
启用后,这个配置项对于上传大文件很有用。上文讲过,当用户请求的
Content-Length大于max_client_body_size配置时,Nginx服务会立刻向用户发送413Request
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
长连接,这个功能对服务
器的性能提高是很有帮助的。但有些浏览器,如
IE 6

Safari
,它们对于使用
keepalive
功能的
POST
请求处理有功能性问题。因此,针对
IE 6
及其早期版本、
Safari
浏览器默认是禁用
keepalive
功能的

keepalive超时时间

语法: keepalive_timeout time(默认单位:秒);
默认: keepalive_timeout 75;
配置块: http、server、location
一个
keepalive
连接在闲置超过一定时间后(默认的是
75
秒),服务器和浏览器都会去关
闭这个连接。当然,
keepalive_timeout
配置项是用来约束
Nginx
服务器的,
Nginx
也会按照规范
把这个时间传给浏览器,但每个浏览器对待
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
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
与文件扩展名。
types_hash_bucket_size
设置了每个散列桶占用的内存大小。

对客户端请求的限制

HTTP方法名限制用户请求

语法: limit_except method...{...}
配置块: location
Nginx
通过
limit_except
后面指定的方法名来限制用户请求。方法名可取值包括:
GET
HEAD

POST

PUT

DELETE

MKCOL

COPY

MOVE

OPTIONS

PROPFIND
PROPPATCH

LOCK

UNLOCK
或者
PATCH
。例如:
limit_except GET {
allow 192.168.1.0/32;
deny all;
}
注意,允许
GET
方法就意味着也允许
HEAD
方法。因此,上面这段代码表示的是禁止
GET
方法和
HEAD
方法,但其他
HTTP
方法是允许的。

HTTP请求包体的最大值

语法: client_max_body_size size;
默认: client_max_body_size 1m;
配置块: http、server、location
  浏览器在发送含有较大
HTTP
包体的请求时,其头部会有一个
Content-Length字段,
client_max_body_size是用来限制Content-Length
所示值的大小的。因此,这个限制包体的配置
非常有用处,因为不用等
Nginx
接收完所有的
HTTP
包体
——
这有可能消耗很长时间
——
就可
以告诉用户请求过大不被接受。例如,用户试图上传一个
10GB
的文件,
Nginx
在收完包头
后,发现
Content-Length
超过
client_max_body_size
定义的值,就直接发送
413(“Request EntityToo Large”)响应给客户端。

对请求的限速

语法: limit_rate speed;
默认: limit_rate 0;
配置块: http、server、location、if
配置是对客户端请求限制每秒传输的字节数。s
针对不同的客户端,可以用
$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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!