广告
返回顶部
首页 > 资讯 > 服务器 >nginx之keepalive详解与其配置
  • 824
分享到

nginx之keepalive详解与其配置

nginx网络服务器 2023-09-03 20:09:30 824人浏览 薄情痞子
摘要

文章目录 一、keepalive理解什么是keepalive如何确定请求头和响应体的长度?是否可使用长连接的条件是什么?keepalive时Nginx的等待时长是多少?keepalive的优势

文章目录


一、keepalive理解

什么是keepalive

keepalive是长连接的意思。客户端发起Http请求前需要先与服务端建立tcp连接,每次TCP连接都需要三次握手来确定,三次交互不仅会增加消费时间,还会增加网络流量。http请求是请求应答式,如果能知道每个请求头与响应体的长度,就可以在一个连接上执行多个请求,这个就是所谓的长连接。

(注意:keepalive是tcp层长连接探活机制;keep-alive是应用层http协议使用,在其头部Connection字段中的一个值,只是代表客户端与服务之间需要保持长连接,可以理解为通过此字段来告诉nginx此连接需要维持长连接,处理完别直接关闭连接。)

如何确定请求头和响应体的长度?

1、请求头长度: 如果当前请求有body,Nginx需要客户端在请求头中指定content-length来表明body的大小,否则返回400。
 2、响应体长度: 在http协议中响应body长度的确定
http1.0:①响应头中有content-length,content-length即为body长度。客服端依照这个长度接收数据,接收完了就表示请求完成。②响应头中没有content-length,客户端会一直接收数据,知道服务端主动断开,才表示body接收完了。
http1.1:①chunked传输,响应头中有Transfer-encoding,body为流式输出,body被分成多个块,每块的开始会标识出当前块的长度,此时body不需要通过长度指定。②非chunked传输,响应头中有content-length则按照content-length来接收数据,没有content-length,则客户端接收数据,知道服务器主动断开。

是否可使用长连接的条件是什么?

可知响应体长度的情况下,当服务器输出完body后可以考虑使用长连接。长连接的条件限制如下:

  1. 客服端的请求头中的connection为close,则客户端要求不使用长连接。
  2. 客户端的请求头中的connection为keep-alive,则客户端要求使用长连接。
  3. 客户端的请求头中没有connection这个头,如果是http1.0协议默认为close,如果是http1.1协议默认为keep-alive。

keepalive时Nginx的等待时长是多少?

长连接时,Nginx在输出完响应体后,会设置当前连接的keepalive属性,然后等待客户端的下一次请求,同时也设置了一个最大等待时间,这个时间通过keepalive_timeout来配置,如果是0,则表示关掉长连接,此时不管客户端的connection值是什么都会强制设为close。

keepalive的优势是什么?

服务端确定是keepalive打开时,在响应的http头中也会有connection=Keep-Alive,否则为Close。如果connection值为colse,Nginx在响应完数据后就会关掉连接。所以对于请求量较大的Nginx来说,关掉keepalive最后会产生较多的time-wait状态的Socket。当客户端的一次访问需要多次访问同一个server时,keepalive会大量减少time-wait的数量。

二、nginx的keepalive配置

nginx保持keepalive需做那些事情

  1. client到nginx的连接是长连接
  2. nginx到server的连接是长连接
    在这里插入图片描述

nginx的文件配置

(1)配置TCP层keepalive探活机制的三个参数:

#情况1:http {server {    listen 127.0.0.1:3306 so_keepalive=on;#开启keepalive探活,探测策略走系统默认    }}#情况2:http {server {    listen 127.0.0.1:3306 so_keepalive=7m:75s:9;#把空闲时长从系统默认的5分钟改为了7分钟    }}

其中so_keepalive有如下选择配置:

so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]*   on: 开启,探测参数更加系统默认值*   off: 关闭*   keepidle: 连接空闲等待时间 *   keepintvl: 发送探测报文间隔时间*   keepcent: 探测报文重试次数

如果nginx未设置so_keepalive配置,则走系统默认的探活策略

(2)nginx与客户端(一般为浏览器、APP等)保持的长连接进行限制管理:

http {    keepalive_timeout  120s 120s;    keepalive_requests 100;}
keepalive_timeout timeout [header_timeout];

第一个参数:客户端连接在服务器端空闲状态下保持的超时值(默认75s);值为0会禁用keep-alive,也就是说默认不启用长连接;第二个参数:响应的header域中设置“Keep-Alive: timeout=time”;告知浏览器对长连接的维持时间;官网介绍如下:
在这里插入图片描述

keepalive_requests number;

keepalive_requests:默认100,某个长连接连续处理请求次数限制,超过次数则该长连接被关闭;如果需要释放某个连接占用的内存,必须关闭该链接,内存不大的情况下,不建议开大该配置;在QPS较高的场景,则有必要加大这个参数;

(3)nginx与上游server保持长连接

http {    upstream  BACKEND {        server 127.0.0.1:8000;        server 127.0.0.1:8001;        server 127.0.0.1:8002;        keepalive 300; //空闲连接数           keepalive_timeout  120s;//与上游空闲时间        keepalive_requests 100;//与上游请求处理最大次数    }    server{        listen 8080;        location /{            proxy_pass http://BACKEND;            proxy_http_version 1.1;            proxu_set_header Connection "";        }    }}

keepalive:限制nginx某个worker最多空闲连接数,此处不会限制worker与上游服务长连接的总数;
keepalive_timeout:nginx与上游长连接最大空闲时间,默认值为60s;
keepalive_requests:nginx与上游长连接最大交互请求的次数,默认值为100;

三、应用场景

什么时候使用?

明显的预知用户会在当前连接上有下一步操作
复用连接,有效减少握手次数,尤其是https建立一次连接开销会更大

什么时候不用?

访问内联资源一般用缓存,不需要keepalive
长时间的tcp连接容易导致系统资源无效占用

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,
分享给大家:[linux,Nginx,ZeroMQMysqlRedis
fastdfs,mongoDB,ZK,流媒体,CDN,P2P,k8sDocker
TCP/IP,协程,DPDK等技术内容,点击立即学习:服务器课程

来源地址:https://blog.csdn.net/weixin_52259848/article/details/127110350

--结束END--

本文标题: nginx之keepalive详解与其配置

本文链接: https://www.lsjlt.com/news/392747.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • nginx之keepalive详解与其配置
    文章目录 一、keepalive理解什么是keepalive如何确定请求头和响应体的长度?是否可使用长连接的条件是什么?keepalive时Nginx的等待时长是多少?keepalive的优势...
    99+
    2023-09-03
    nginx 网络 服务器
  • Nginx安装与配置详解
    Nginx负载均衡集群 一、Nginx简介1、nginx介绍2、反向代理2.1 什么是代理服务器?2.2 为什么要使用代理服务器?2.3 反向代理 VS 正向代理 3、负载均衡3.1 什么是负载均衡? 二、Nginx...
    99+
    2023-08-21
    nginx 服务器 运维
  • nginx 配置指令之location使用详解
    目录前言配置策略具体属性介绍Nginx是支持世界上所有网站三分之一的Web服务器。因为轻巧,模块化,用户友好的配置格式以强大的反向代理能力,Nginx迅速取代其他Web服务器成了互联...
    99+
    2022-11-13
  • Nginx安装配置详解
    不论是本地开发,还是远程到 Server 开发,还是给提供 demo 给人看效果,我们时常需要对 Nginx 做配置,Nginx 的配置项相当多,如果考虑性能配置起来会比较麻烦。不过...
    99+
    2022-11-13
  • Nginx配置使用详解
    配置步骤: 1、配置nginx的方法:首先要打开“/etc/nginx/conf.d/”文件夹; 2、然后创建配置文件;接着在“/etc/ngi...
    99+
    2022-11-13
  • Centos7下nginx的安装与配置教程详解
    说明:软件安装的基础目录路径:/usr/local 所以下载软件的时候切换到此目录下下载直接解压即可 1.安装gcc gcc-c++依赖包 yum install -y gcc gcc-c++ 2.下载编译安装PCRE库...
    99+
    2022-06-04
    Centos7 nginx 安装与配置 nginx安装和配置
  • Nginx配置文件(nginx.conf)详解
    1、配置文件在哪? 想要了解nginx的配置文件,得先知道它在哪吧!可通过以下命令查看:  2、nginx.conf文件的结构 nginx.conf一共由3部分组成:全局块、events块、http块。 2.1全局块 全局块是默认配置文件...
    99+
    2023-09-23
    nginx 运维 服务器
  • Nginx配置详解,一文带你搞懂Nginx
    1 基本概念 1.1 Nginx简介 Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现好。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常...
    99+
    2023-08-18
    nginx 服务器 负载均衡
  • Nginx支持websocket的配置详解
    目录一、对wss与nginx代理wss的理解:二、Nginx 支持websocket的配置一、对wss与nginx代理wss的理解: 1、wss协议实际是websocket+SSL,...
    99+
    2023-03-06
    Nginx websocket配置 Nginx websocket
  • nginx平滑升级及nginx配置文件详解
    目录nginx平滑升级及nginx配置文件nginx平滑升级并添加新功能nginx配置文件nginx.conf配置详解用于调试、定位问题的配置参数正常运行必备的配置参数优化性能的配置...
    99+
    2022-11-13
    nginx平滑升级 nginx配置文件
  • Nginx最大连接数配置详解
    本文实例为大家分享了Nginx最大连接数配置的具体代码,供大家参考,具体内容如下 配置Nginx最大工作进程数## worker_processes:最大工作进程数 work_co...
    99+
    2022-11-13
  • Nginx中Location配置超详细讲解
    目录一、语法二、匹配顺序三、root 与 alias 的区别四、server 和 location 中的 root总结一、语法 Location 是 Nginx 中一个非常核心的配置...
    99+
    2023-01-09
    nginx location配置 nginx配置location nginx 配置详解
  • Vue之props配置详解
    <template> <div class="demo"> <h1>{{ msg}}</h1> <h2...
    99+
    2022-11-12
  • Nginx配置文件nginx.conf的基本配置实例详解
    目录前言1. Nginx配置样例2. Nginx负载均衡方式2.1 轮询2.2 权重2.3 Nginx解决集群共享session问题的方案3. Nginx动静分离(静态资源...
    99+
    2022-11-13
  • nginx七层负载均衡配置详解
    目录一、负载均衡介绍二、nginx下载安装1、下载nginx源码包2、安装并启用三、nginx七层负载均衡配置real server设置:客户端设置:四、nginx扩充调度算法(sticky)1.下载扩展包2.编译前做一些优化:3.重新编译...
    99+
    2022-09-23
  • 详解Nginx的超时keeplive_timeout配置步骤
    目录keepalive_timeoutclient_body_timeoutclient_header_timeoutsend_timeoutNginx 处理的每个请求均有相应的超时...
    99+
    2022-11-13
  • Spring实战之XML与JavaConfig的混合配置详解
    前言之前提到了关于Spring的显示配置方式有两种,一种是基于XML配置,一种是基于JavaConfig的方式配置。对于这两种配置方式并不是互斥关系,相反,他们两能够相互融合,有效的搭配完成Spring的bean注入。这里分别介绍如何在Ja...
    99+
    2023-05-31
    spring javaconfig xml
  • linux 下载 安装 php详细步骤与nginx配置
    安装必备软件-php安装 1 、添加 PHP 的源地址   rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm...
    99+
    2023-10-09
    php linux 服务器
  • 详解Docker下nginx外挂配置和文件
    外挂文件的目的: 文件不受docker镜像文件的约束,可以修改,重启容器,可以使用更新后的文件,不会被镜像还原容器运行过程中记录的文件如日志等信息,可以被自动保存在外部存储上,不会由...
    99+
    2022-11-13
  • Springboot自动配置与@Configuration配置类详解
    目录@Configuration注意点1注意点2注意点3注意点4springboot自动配置@Configuration 注意点1 配置类(@Configuration下的这个类)其...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作