ngxin开发一个静态http服务器二
创始人
2024-03-06 16:22:49
0

内存及磁盘资源的分配

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 optnginx/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;
(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服务器向客户端发送了数据包,但客户 端一直没有去接收这个数据包。如果某个连接超过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服务会立刻向用户发送413(Request 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;

相关内容

热门资讯

暴涨500%!19岁巴尔泰萨吉... 在意甲的舞台上,年轻球员的崛起往往令人瞩目,而19岁的巴尔泰萨吉正是近期最耀眼的新星之一。随着德转最...
完善幼儿园收费政策!三部门发文 来源 | 国家发展改革委微信,转自中国政府网微信 近日,国家发展改革委、教育部、财政部联合印发《关于...
老人“睡梦中”离世,警方靠共享... 孙大妈躺在床上 被子整整齐齐地盖在身上 就像睡着了一样 人却已经没有了呼吸 根据取款人的车辆骑行轨迹...
原创 中... 时值岁末,中航工业微信公众号中的说法,再一次引起了大家的注意。 近日,中航工业在“年末盘点”时,提...
“粤车南下”政策升级 今天起获... (央视财经《经济信息联播》)今天(23日)零时起,“粤车南下”驶入香港市区政策正式实施,广州、珠海、...
原创 李... 2025年12月23日零点,李艺彤在30岁生日当天,发文告别丝芭,强调"人生有梦,各自精彩"。丝芭1...
法律是否必然需要解释?新书《法... 本书聚焦法律解释的确定性或客观性问题——这是法治的一个重要预设,也是法哲学的一个核心难题。 为了回答...
山西调整烟花爆竹燃放政策 卫生... 中新网太原12月23日电 (记者 范丽芳)23日,记者从山西省卫生健康委员会获悉,针对山西调整烟花爆...
ST金鸿(000669)披露重... 截至2025年12月23日收盘,ST金鸿(000669)报收于3.02元,较前一交易日下跌1.31%...
三部门印发《关于完善幼儿园收费... 国家发展改革委、教育部、财政部联合印发的《关于完善幼儿园收费政策的通知》23日对外公布,旨在更好促进...