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


    内存及磁盘资源的分配

    1.HTTP包体只存储到磁盘文件中
    1. 语法: client_body_in_file_only on|clean|off;
    2. 默认: client_body_in_file_only off;
    3. 配置块: http、server、location
    当值为非 off 时,用户请求中的 HTTP 包体一律存储到磁盘文件中,即使只有 0 字节也会存
    储为文件。当请求结束时,如果配置为 on ,则这个文件不会被删除(该配置一般用于调试、
    定位问题),但如果配置为 clean ,则会删除该文件
    2.HTTP包体尽量写入到一个内存buffer
    1. 语法: client_body_in_single_buffer on|off;
    2. 默认: client_body_in_single_buffer off;
    3. 配置块: http、server、location
    用户请求中的 HTTP 包体一律存储到内存 buffer 中。当然,如果 HTTP 包体的大小超过了
    下面 client_body_buffer_size 设置的值,包体还是会写入到磁盘文件
    (3)存储HTTP头部的内存buffer大小
    1. 语法: client_header_buffer_size size;
    2. 默认: client_header_buffer_size 1k;
    3. 配置块: http、server
    上面配置项定义了正常情况下 Nginx 接收用户请求中 HTTP header 部分(包括 HTTP 行和
    HTTP 头部)时分配的内存 buffer 大小。有时,请求中的 HTTP header部分可能会超过这个大
    小,这时large_client_header_buffers定义的buffer将会生效
    (4)存储超大HTTP头部的内存buffer大小
    1. 语法: large_client_header_buffers number size;
    2. 默认: large_client_header_buffers 48k;
    3. 配置块: 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 大小
    1. 语法: client_body_buffer_size size;
    2. 默认: client_body_buffer_size 8k/16k;
    3. 配置块: http、server、location
    面配置项定义了 Nginx 接收 HTTP 包体的内存缓冲区大小。也就是说, HTTP 包体会先
    接收到指定的这块缓存中,之后才决定是否写入磁盘。
    note:
    如果用户请求中含有HTTP头部Content-Length,并且其标识的长度小于定义
    的buffer大小,那么Nginx会自动降低本次请求所使用的内存buffer,以降低内存消耗。
    (6)HTTP包体的临时存放目录
    1. 语法: client_body_temp_path dir-path[level1[level2[level3]]]
    2. 默认: client_body_temp_path client_body_temp;
    3. 配置块: 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 连接会预先分配一个内存池
    1. 语法: connection_pool_size size;
    2. 默认: connection_pool_size 256;
    (8request_pool_size

    1. 语法: request_pool_size size;
    2. 默认: request_pool_size 4k;
    3. 配置块: http、server

    Nginx开始处理HTTP请求时,将会为每个请求都分配一个内存池,size配置项将指定这

    个内存池的初始大小

    网络连接的设置

    1.时间

    读取HTTP头部的超时时间

    1. 语法: reset_timeout_connection on|off;
    2. 默认: reset_timeout_connection off;
    3. 配置块: http、server、location
    1. 语法: client_header_timeout time(默认单位:秒);
    2. 默认: client_header_timeout 60;
    3. 配置块: http、server、location
    如果在一个时间间 隔(超时时间)内没有读取到客户端发来的字节,则认为超时,并向客户端返回 408("Request timed out")响应。

    读取HTTP包体的超时时间

    1. 语法: client_body_timeout time(默认单位:秒);
    2. 默认: client_body_timeout 60;
    3. 配置块: http、server、location

    发送响应的超时时间

    1. 语法: send_timeout time;
    2. 默认: send_timeout 60;
    3. 配置块: http、server、location
    这个超时时间是发送响应的超时时间,即 Nginx 服务器向客户端发送了数据包,但客户
    端一直没有去接收这个数据包。如果某个连接超过 send_timeout 定义的超时时间,那么 Nginx
    将会关闭这个连接

    关闭

    reset_timeout_connection

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

    lingering_close

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

    lingering_time

    1. 语法: lingering_time time;
    2. 默认: lingering_time 30s;
    3. 配置块: http、server、location
    Lingering_close 启用后,这个配置项对于上传大文件很有用。上文讲过,当用户请求的
    Content-Length大于max_client_body_size配置时,Nginx服务会立刻向用户发送413Request entity too large )响应。但是,很多客户端可能不管 413 返回值,仍然持续不断地上传 HTTP body,这时,经过了 lingering_time 设置的时间后, Nginx 将不管用户是否仍在上传,都会把连 接关闭掉

    lingering_timeout

    1. 语法: lingering_timeout time;
    2. 默认: lingering_timeout 5s;
    3. 配置块: http、server、location
    lingering_close 生效后,在关闭连接前,会检测是否有用户发送的数据到达服务器,如果
    超过lingering_timeout时间后还没有数据可读,就直接关闭连接;否则,必须在读取完连接缓
    冲区上的数据并丢弃掉后才会关闭连接

    keepalive

    对某些浏览器禁用keepalive功能

    1. 语法: keepalive_disable[msie6|safari|none]...
    2. 默认: keepalive_disable msie6 safari
    3. 配置块: http、server、location
    HTTP 请求中的 keepalive 功能是为了让多个请求复用一个 HTTP 长连接,这个功能对服务
    器的性能提高是很有帮助的。但有些浏览器,如 IE 6 Safari ,它们对于使用 keepalive 功能的
    POST 请求处理有功能性问题。因此,针对 IE 6 及其早期版本、 Safari 浏览器默认是禁用 keepalive 功能的

    keepalive超时时间

    1. 语法: keepalive_timeout time(默认单位:秒);
    2. 默认: keepalive_timeout 75;
    3. 配置块: http、server、location
    一个 keepalive 连接在闲置超过一定时间后(默认的是 75 秒),服务器和浏览器都会去关
    闭这个连接。当然, keepalive_timeout 配置项是用来约束 Nginx 服务器的, Nginx 也会按照规范
    把这个时间传给浏览器,但每个浏览器对待 keepalive 的策略有可能是不同的。

    一个keepalive长连接上允许承载的请求最大数

    1. 语法: keepalive_requests n;
    2. 默认: keepalive_requests 100;
    3. 配置块: http、server、location

    MIME类型的设置

    MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式

    ·MIME type与文件扩展的映射

    1. 语法: type{...};
    2. 配置块: http、server、location
    定义 MIME type 到文件扩展名的映射。多个扩展名可以映射到同一个 MIME type
    1. types {
    2. text/html html;
    3. text/html conf;
    4. image/gif gif;
    5. image/jpeg jpg;
    6. }

    ·默认MIME type

    1. 语法: default_type MIME-type;
    2. 默认: default_type text/plain;
    3. 配置块: http、server、location

    ·types_hash_bucket_size

    1. 语法: types_hash_bucket_size size;
    2. 默认: types_hash_bucket_size 32|64|128;
    3. 配置块: http、server、location
    为了快速寻找到相应 MIME type Nginx 使用散列表来存储 MIME type 与文件扩展名。
    types_hash_bucket_size 设置了每个散列桶占用的内存大小。

    对客户端请求的限制

    HTTP方法名限制用户请求

    1. 语法: limit_except method...{...}
    2. 配置块: location
    Nginx 通过 limit_except 后面指定的方法名来限制用户请求。方法名可取值包括: GET
    HEAD POST PUT DELETE MKCOL COPY MOVE OPTIONS PROPFIND
    PROPPATCH LOCK UNLOCK 或者 PATCH 。例如:
    1. limit_except GET {
    2. allow 192.168.1.0/32;
    3. deny all;
    4. }
    注意,允许 GET 方法就意味着也允许 HEAD 方法。因此,上面这段代码表示的是禁止
    GET 方法和 HEAD 方法,但其他 HTTP 方法是允许的。

    HTTP请求包体的最大值

    1. 语法: client_max_body_size size;
    2. 默认: client_max_body_size 1m;
    3. 配置块: 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")响应给客户端。

    对请求的限速

    1. 语法: limit_rate speed;
    2. 默认: limit_rate 0;
    3. 配置块: http、server、location、if
    配置是对客户端请求限制每秒传输的字节数。s
    针对不同的客户端,可以用 $limit_rate 参数执行不同的限速策略。例如:
     
    1. server {
    2. if ($slow) {
    3. set $limit_rate 4k;
    4. }
    5. }

    limit_rate_after

    1. 语法: limit_rate_after time;
    2. 默认: limit_rate_after 1m;
    3. 配置块: http、server、location、if

    此配置表示Nginx向客户端发送的响应长度超过limit_rate_after后才开始限速。例如:

    1. limit_rate_after 1m;
    2. limit_rate 100k;

  • 相关阅读:
    Lazada本土店怎么运营?Lazada本土店发货流程——站斧浏览器
    Java 8 Stream API 引入和使用
    抖音短视频矩阵系统搭建
    Paddle图神经网络训练-PGLBox代码阅读笔记
    二十三种设计模式全面解析-单例设计模式:解密全局独一无二的实例创造者
    计算机毕业设计Java订餐系统(源码+系统+mysql数据库+lw文档)
    ubuntu20.04+vtd环境搭建
    Part 4.2 背包动态规划
    服务端NioSocketChannel泄漏案例
    SpringBoot集成Spring Data JPA项目实操
  • 原文地址:https://blog.csdn.net/qq_62309585/article/details/128130106