Nginx之keepalive配置解读

2023-10-28

目录

keepalive基础介绍

Nginx中的keepalive配置项

应用场景

什么时候使用?

什么时候不用?


keepalive基础介绍

keepalive是HTTP/1.1协议中的一个特性,它允许客户端和服务器之间的TCP连接在一个HTTP请求/响应周期结束后保持打开状态,以便在后续的请求中重复使用。这样可以减少TCP连接的建立和关闭次数,从而提高性能。

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

  • 连接维护:keepalive会维护长连接,并在连接超时时间内重新连接,以确保服务器端始终处于运行状态。
  • 提高效率:通过维护长连接,可以减少建立和关闭连接所需的时间,从而提高服务器的效率。
  • 节省带宽:由于keepalive可以维护长连接,因此减少了建立和关闭连接所需的网络流量,从而节省了带宽。
  • 稳定性:通过心跳包维护连接,可以确保服务器端始终处于运行状态,从而提高了网站的稳定性和可用性。

为什么使用HTTPs长连接技术?

  • 对响应时间要求较高;
  • 服务走的是公网,客户端与服务端的TCP建立的三次握手和断开的四次挥手都需要40ms左右(真实数据包计算出来的),共需要80ms左右;
  • 每个接入方使用的IP就若干个,需要建立的请求连接有限。
  • 使用长连接技术,可以大幅减少TCP频繁握手的次数,极大提高响应时间;同时,即使使用长连接技术,也不需要消耗很多的系统资源用来缓存sockets会话信息。 
http {
upstream backend {
  server 192.168.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
  server 192.168.0.2:8080 weight=1 max_fails=2 fail_timeout=30s;
  keepalive 300;      
}  
 
server {
  listen 8080 default_server;
  server_name "";
 
location / {
  proxy_pass http://backend;
  proxy_http_version 1.1;                   #设置http版本为1.1
  proxy_set_header Connection "";           #设置Connection为长连接(默认为no)
  }
}

 HTTP 协议中对长连接的支持是从 1.1 版本之后才有的,因此最好通过 proxy_http_version 指令设置为 1.1。HTTP1.0不支持keepalive特性,当没有使用HTTP1.1的时候,后端服务会返回101错误,然后断开连接。而 "Connection" header 可以选择被清理,这样即便是 Client 和 Nginx 之间是短连接,Nginx 和 upstream 之间也是可以开启长连接的。这种情况下必须清理来自 Client 请求中的 “Connection” header。

要想做到Client与Nginx之间保持长连接,需要:

  • -  Client发送过来的HTTP请求要求携带"keep-alive"header。
  • -  Nginx设置支持keepalive 

Nginx中的keepalive配置项

keepalive_timeout  

Nginx 使用 keepalive_timeout 来指定 KeepAlive 的超时时间(timeout),指定每个 TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为 0,就禁止了 keepalive 连接。

# 可用于 http, server, location 配置块
# 设置 TCP 链接保持 60 秒
keepalive_timeout 60s;

send_timeout 

服务端向客户端传输数据的超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,Nginx就会关闭连接。

# 配置段: http, server, location
send_timeout 30s;

keepalive_request

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

# 配置段: http, server, location  
keepalive_request 10000;

应用场景

什么时候使用?

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

什么时候不用?

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx之keepalive配置解读 的相关文章

  • 错误:最终加载程序(./node_modules/awesome-typescript-loader/dist/entry.js)未返回缓冲区或字符串

    dockerhub构建dockerfile时出现此错误 错误 最终加载程序 node modules awesome typescript loader dist entry js 未返回缓冲区或字符串 我在网上搜索了各种解决方案 但没有找
  • Nginx 和 Flask-socketio Websockets:存在但没有消息传递?

    我在让 Nginx 与 Python Flask socketio 库 基于 gevent 很好地配合时遇到了一些麻烦 目前 由于我们正在积极开发 我正在尝试让 Nginx 充当代理 对于发送页面 我可以通过直接运行flask socket
  • uwsgi协议比http协议快吗?

    我正在尝试部署 django 应用程序的各种设置 我的第一选择是使用带有 mod wsgi 的简单 apache 服务器 我之前已经实现了该服务器供私人使用 由于当前的部署是供公众使用的 因此我正在考虑各种选择 根据网上提供的信息 使用 n
  • 禁用 Kubernetes NGINX 入口的 SSL 重定向

    默认情况下 在 Kubernetes NGINX 入口中启用 SSL 重定向 如何禁用此功能 目前的实施如下 apiVersion extensions v1beta1 kind Ingress metadata name project
  • 如何列出 nginx 中的所有虚拟主机

    有没有一个命令可以列出 CentOS 上 nginx 下运行的所有虚拟主机或服务器 我想将结果通过管道传输到文本文件以用于报告目的 我正在寻找与我用于 Apache 的命令类似的命令 apachectl S 2 gt 1 grep 端口 8
  • nginx 解析器——dns

    请原谅一个非常初学者的问题 我无法理解 nginx 的 解析器 参数及其工作原理 我已阅读文档 搜索教程和帖子 使用解析器 nginx 和 dns 等关键字 但我仍然不确定如何应用解析器 http nginx org en docs htt
  • nginx/mono 2.8 上的 ASP.Net MVC 2

    我正在尝试在 Linux 环境上设置 ASP Net MVC 2 应用程序 我在 VirtualBox 上安装了 Ubuntu 10 10 然后从源安装了 Mono 2 8 之后我安装了 nginx 并按照建议进行配置here http w
  • Nginx 作为负载均衡器,具有 75% 和 25% 加权路由

    我是 Nginx 新手 我有两台服务器 serverA 和 serverB 我希望 75 的请求发送到 serverA 其余 25 的请求发送到 serverB 这可能吗 使用nginx加权路由 stream upstream stream
  • Nginx 在子文件夹中重写 (404)

    我有一个网站主机NGINX曾经工作正常的服务器删除index php在 nginx 站点配置中使用try files 但现在我要在上面添加一个博客 其中 URL 将是www foo com blog 我可以访问博客并使用index php
  • iFrame 在 Facebook Canvas 应用程序中显示为空白

    我有一个非常简单的页面 我试图在 Facebook iframe 中查看它 它是一个 Django 视图 但它不依赖于请求是通过 POST 还是 GET 提交 它所做的只是返回一些简单的 HTML 如果我们直接点击链接 它会正确显示 如果在
  • Kibana 5.5.1 位于 nginx 1.13 代理之后(dockerized)

    Goal 我想在 docker 容器中运行 elk 堆栈 能够通过 nginx 代理访问 ELK Stack 以绕过服务的各个端口 Kibana 服务 默认端口 5601 http
  • 如何在 nginx 反向代理后面安全地检测 CakePHP 中的 SSL?

    CakePHP 我见过的所有版本 检查 SERVER HTTPS 查看请求是否是通过 HTTPS 而不是普通 HTTP 发出的 我使用 nginx 作为负载均衡器 后面是 Apache 应用程序服务器 由于 SSL 连接在负载均衡器处终止
  • nginx 504 网关超时

    我正在 nginx 上使用 phusion passenger 运行 Rails3 0 7 项目 当我正在做 ajax 时 大约需要 15 分钟来处理 调用 ajax 10 分钟后 它会跳出一个 Firebug 错误 显示 504 Gate
  • Capistrano + Thin + nginx 不允许用户使用 sudo howto?

    我有一个这样的场景 我想使用 capistrano 部署 ruby on Rails 应用程序 Web 应用程序位于瘦集群上 配置文件存储在 etc thin 下 etc init d thin 中还有一个初始化脚本 因此每当我的服务器需要
  • 构建具有“RUN apt-get update”的 Dockerfile 给我“rootfs 内的监狱进程导致‘权限被拒绝’”

    我的 Docker 主机是 Ubuntu 19 04 我使用 snap 安装了 docker 我创建了一个 Dockerfile 如下所示 FROM ubuntu 18 04 USER root RUN apt get update RUN
  • 将虚拟主机分配给 Docker 端口

    我设置了通配符 DNS 以便对自定义域 foo 的所有 Web 请求都映射到 Docker 主机的 IP 地址 如果我有多个运行 Apache 或 Nginx 实例的容器 每个容器都会将 Apache 端口 80 映射到某个外部入站端口 我
  • 使用 Nginx 自定义错误网关页面

    是否可以在 Nginx 中提供自定义的 Bad Gateway 错误页面 类似于自定义 404 页面 为了显示您的自定义错误页面而不是一般的 错误网关 错误 必须满足三个部分 您必须创建一个名为 500 html 之类的 html 文件并将
  • GitLab 发布临时 IP 禁令 - 403 禁止

    我的 GitLab 实例设置有时会对我们自己的 IP 地址实施 IP 禁令 导致办公室中的所有用户在任何网页或 git 请求上都会收到 403 Forbidden 该禁令的实施是由于身份验证重复出现错误 这完全是一个单独的问题 但我想防止我
  • nginx - 禁用特定 URL 的 HTTPS 重定向

    我将 nginx 设置为将所有 HTTP 请求重定向到 HTTPS 如下所示 Redirect every request to HTTPS server listen 80 listen 80 server name sub exampl
  • 在同一个 nginx 服务器块上公开多个 api uri

    Goal 我的目标是在同一个 nginx 服务器上设置多个后端 api 容器 http localhost 80 api account gt 调用 http account service 9000 http localhost 80 a

随机推荐

  • 一文了解OpenAi的发展历史

    OpenAI是一家人工智能研究机构 成立于2015年 总部位于美国加州旧金山 它的目标是促进人工智能的发展 使其成为人类最重要的技术之一 并为全球公众带来积极的社会影响 下面是OpenAI的发展历史 2015年 Elon Musk Sam
  • 【机器学习】干货:计算两个向量之间相似性的方法(含源代码)

    最近在做实验的时候 需要计算两个向量之鉴的相似性 该如何实现呢 文章目录 一 余弦相似性 Cosine Similarity 1 1 理论 1 2 实践 1 2 1 文本处理 1 2 2 图像处理 1 2 3 推荐系统 1 2 4 聚类分析
  • SQL注入之五大注入手法

    文章目录 0 重要的函数 0 Mysql字符串函数 0 重要的数据库 0 重要的表 1 UNION query SQL injection 可联合查询注入 2 Error based SQL injection 报错型注入 数据库报错注入版
  • vue2路由手动创建&二级路由&路由传参&路由守卫&打包上线

    路由手动配置 在 vue cli创建的项目中 路由用法如下 1 安装路由 npm install vue router 3 2 定义路由所需的组件 vue文件 要实现页面about 和home两个路由 我们先定义两个组件 定义页面级组件 创
  • CTR深度学习模型之 DSIN(Deep Session Interest Network) 论文解读

    之前的文章讲解了DIEN模型 CTR深度学习模型之 DIEN Deep Interest Evolution Network 的理解与示例 而这篇文章要讲的是DSIN模型 它与DIEN一样都从用户历史行为中抽取兴趣表示 但不同的是DSIN把
  • 用 Qt Designer 创建可扩展对话框

    前面我们设计的对话框都是不能改变它的样子的 但是有时需要对话框根据要求进行适当的改变 两个最常用的需要改变的对话框是可扩展对话框和多页对话框 这两种类型的可以通过代码编写 也可以用Qt Designer 设计 一个例子如下图所示 图 1 可
  • 记录在安装wsl途中遇到的一些坑

    前情 因为要给公司的电脑搭建编译环境 其中需要wsl环境 结果搭建的过程踩到了很多坑 在此记录一下 小白一个 目前只会简单的搭建一下环境 1 wsl1升级为wsl2 起因 想给自己电脑的wsl1升级为wsl2 在powershell里执行了
  • STM32设置为I2C从机模式(HAL库版本)

    STM32设置为I2C从机模式 HAL库版本 目录 STM32设置为I2C从机模式 HAL库版本 前言 1 硬件连接 2 软件编程 2 1 步骤分解 2 2 测试用例 3 运行测试 3 1 I2C连续写入 3 2 I2C连续读取 3 3 I
  • 后端data的存储

    一 数据的格式 创建一个名为data的文件夹 创建文件userlist json的文件用来存储数据 7w username 7w password 6512bd43d9caa6e02c990b0a82652dca create time 2
  • NJU-ICS-linklab 从零开始复习程序的链接与ELF

    linklab实验记录 实验题目及材料 https github com qmj0923 NJU ICS linklab 实验环境 debian 10 5 0 i386 netinst虚拟机 gcc Debian 8 3 0 6 8 3 0
  • 【算法竞赛宝典】插入排序

    算法竞赛宝典 插入排序 题目描述 伪代码 代码展示 代码讲解 题目描述 伪代码 代码展示 插入排序数 请自己根据例程修改 include
  • pycharm Git reset

    天下苦不会用git久矣 所以记录一下 一 回到原先某一时刻版本 如果后面的commit都不想要了 就想回到前面的某个时间 在本地要 在远程也得改head 在local命令利用 git push origin HEAD force
  • Web安全—暴力破解(pikachu)

    Web安全 暴力破解 BurteForce 前言 弱口令yyds 暴力破解虽然是一种原理特别简单的漏洞 其利用方式也非常简单 但其危害却十分巨大 如果我们通过信息阶段找到Web应用的后台登陆页面 然后通过弱口令 暴力破解登陆 那这个Web应
  • Git(六):基本命令(3):储藏、标签、拉取、子模块

    目录 17 stash 储藏 17 2 描述 17 3 基本用法 18 tag 标签 18 1 描述 18 2 基本用法 19 fetch 获取 19 1 描述 19 2 基本用法 20 pull 整合 20 1 描述 20 2 基本用法
  • ' not supported between instances of 'str' and 'float'' aria-label='TypeError: '>' not supported between instances of 'str' and 'float''> TypeError: '>' not supported between instances of 'str' and 'float'

    目录 含义 出现原因 情况一纠正措施 情况二纠正措施 含义 类型错误 浮点数和字符串之间无法比较 出现原因 出现这种错误类型 目前遇到了两种情况 如下 一 对excel的两列数据进行字典键与键值对应操作时 键值列数据既存在浮点数类型又存在字
  • Callable接口、Runable接口、Future接口

    1 Callable与Runable区别 Java从发布的第一个版本开始就可以很方便地编写多线程的应用程序 并在设计中引入异步处理 Thread类 Runnable接口和Java内存管理模型使得多线程编程简单直接 但Thread类和Runn
  • 蓝桥杯评分标准_蓝桥杯比赛要求

    七 奖项设置及评选办法 7 1 省赛 1 参赛选手奖 省赛每个组别设置一 二 三等奖 比例分别为 10 20 30 总比例为实际参赛人数 的 60 零分卷不得奖 省赛一等奖选手获得直接进入全国总决赛资格 所有获奖选手均 可获得由工业和信息化
  • ABA问题及解决

    ABA问hiyi题 在多线程环境下 一个线程需要修改共享变量的值 使用CAS操作时 当其他线程将该共享变量由A该为B 再将B改为A后 这个线程依然可以CAS操作成功 因为这个线程不能感知这个共享变量被修改过 解决方法 给共享变量增加一个版本
  • spring cloud gateway项目启动报错

    spring cloud gateway项目启动报错 Correct the classpath of your application so that it contains a single compatible version of
  • Nginx之keepalive配置解读

    目录 keepalive基础介绍 Nginx中的keepalive配置项 应用场景 什么时候使用 什么时候不用 keepalive基础介绍 keepalive是HTTP 1 1协议中的一个特性 它允许客户端和服务器之间的TCP连接在一个HT