nginx(二十七)长连接和短连接

这篇具有很好参考价值的文章主要介绍了nginx(二十七)长连接和短连接。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一    长连接和短连接概念

1) 'HTTP'的长连接和短连接'本质'上是'TCP'长连接和短连接

2) 在'HTTP/1.0'中默认使用'短'连接;

解读:客户端和服务器'每进行一次HTTP操作',就'建立一次tcp连接',任务结束就'中断'连接

nginx(二十七)长连接和短连接

nginx(二十七)长连接和短连接

长连接和短连接的形象比喻 

二   nginx如何做到长连接

重点:'服务器'和'客户端'都要进行设置,也即'长连接'要客户端和服务端都支持

思考:哪些场景必须使用'长连接'? -->已知:'chunk'、'websocket'

nginx(二十七)长连接和短连接

①    clientnginx 保持长连接

nginx(二十七)长连接和短连接

nginx(二十七)长连接和短连接

nginx(二十七)长连接和短连接

nginx(二十七)长连接和短连接

nginx(二十七)长连接和短连接

1)keepalive_timeout

nginx(二十七)长连接和短连接

2)keepalive_requests

nginx(二十七)长连接和短连接 nginx(二十七)长连接和短连接

 了解keepalive_disable即可

3)keepalive_timeout 和 keepalive_request 关系

nginx(二十七)长连接和短连接

②    nginx保持和后端服务器[上游、源站]的长连接

1)典型的配置

让nginx和后端server"[nginx称为upstream]"之间保持长连接

http {
 
  upstream backend {

  ...
 
  keepalive 300; // 这个很重要,一般'默认'
 
}   
 
location / {
 
    proxy_pass http://backend;
    proxy_http_version 1.1;                         # 设置http版本为1.1
    # 机制:转发请求头为空字符串,不会透传
    # 由于HTTP/1.1不指定Connection,默认是'keepalive'长连接
    proxy_set_header Connection "";                 # 设置Connection为长连接
 
  }
}

2)upstream的keepalive指令设置

说明: 一般保持'默认'值即可

含义: nginx向这'一组'upstream中,最多'保持'多少个'空闲的tcp连接'用于'http keepalive'请求

官方keepalive指令解读

nginx(二十七)长连接和短连接

关于 Nginx upstream keepalive 的说明

nginx(二十七)长连接和短连接

keepalive_requests keepalive_time 

nginx(二十七)长连接和短连接

nginx(二十七)长连接和短连接

 2) proxy_http_version

nginx(二十七)长连接和短连接

nginx(二十七)长连接和短连接

3)proxy_set_header 

nginx(二十七)长连接和短连接

proxy_set_header Connection ""; 设置为""空值,则'不会传递'给后端服务器,相当于不指定'Connection'请求头

# proxy_set_header Connection 默认是'close',会'关闭'长连接;

# HTTP/1.1,如果不指定'Connection'请求头,默认值是'keep-alive',长连接

思考:HTTP/1.0如何建立长连接,协议'不一致'场景

  http协议中connection头的作用

  Connection RFC解释

④  了解ntlm即可

 使用NTLM的windows身份验证的nginx反向代理

优点:实现nginx代理ntlm验证,'无需lua编码'或使用商业版nginx plus

nginx(二十七)长连接和短连接

三      高级技巧

nginx(二十七)长连接和短连接

说明:关于'upstream'中的'keepalive'指令不再赘述

备注:只列出两个'核心'配置

核心:客户端自定义'请求头',决定'是否使用'长连接

nginx(二十七)长连接和短连接

浏览器提供的开发者工具通过Connection ID判断是否是长连接

tcpdump查看Nginx长连接还是短连接

长连接和端连接的应用场景

nginx与tomcat、client之间请求的长连接配置不一致问题解决  查看连接过程中socket状态

四    案例

①    现象

说明:'具体复现'后续有时间了再'重现'

nginx 分发请求错误日志报错upstream sent invalid chunked response while reading upstream

②    解决策略

背景:'nginx和upstream'之间通信,'nginx侧'未配置'长连接'导致

+++++++ location中'设置如下'即可 +++++++

 proxy_http_version 1.1;                         # 设置http版本为1.1
  
 proxy_set_header Connection "";                 # 设置Connection为长连接

③     chunk分片传输原理

nginx(二十七)长连接和短连接

client知道响应体大小的三种方式 

④      nginx的chunk模块 

一个是'内置的ngx_http_chunked_filter_module',是一个filter的模块,是'默认编译'进去的

1) 必须是'开启长连接'的HTTP/1.1

2) 请求和响应双方必须'同时存在'该头

nginx(二十七)长连接和短连接

其它参考 

nginx(二十七)长连接和短连接

 ⑤    nginx关闭chunked文章来源地址https://www.toymoban.com/news/detail-469131.html

++++++++++++'取消掉Transfer-Encoding:chunked'++++++++++++

方式1:'不让'服务器"这里特指nginx的后端服务器"返回Transfer-Encoding:chunked,在客户端"nginx端"请求的时候可以'使用http 1.0'的协议。

方式2:'nginx侧'-->chunked_transfer_encoding off;

到了这里,关于nginx(二十七)长连接和短连接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# 使用Socket实现长链接和短连接

    直接上代码 服务端: 客户端:  

    2024年02月16日
    浏览(27)
  • HTTP的长连接和短连接详解(HTTP 请求头中的Connection字段)

    参考博客:https://www.cnblogs.com/hls-code/p/15015859.html 前言: HTTP的长连接和短连接本质上是TCP的长连接和短连接。 HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。 IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络

    2024年02月15日
    浏览(35)
  • Rsync(二十七)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、概述 二、特性 三、应用场景 四、数据的同步方式 五、rsync传输模式 六、rsync应用 七、rsync 命令 1. 格式  1.1 作为远程命令  1. 2 作为rsync服务 2. 选项 3. 配置文件  3.1  全局配置      

    2024年02月16日
    浏览(25)
  • MySQL变量(二十七)

    二八佳人体似酥,腰悬利剑斩愚夫,虽然不见人头落,暗里教君骨髓枯。 上一章简单介绍了 MySQL触发器(二十六) ,如果没有看过,请观看上一章 在MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果数据。 在 MySQL 数据库中,变

    2024年02月14日
    浏览(30)
  • 二十七、数据可视化

    借助图形来清晰有效表达信息的方式成为可视化,可视化可以帮助我们更好地传递信息。 数据可视化的基础还是数据,要将数据图表化,首先要整理数据,明确要把哪些数据图表化。 知道了要把哪些数据数据图表化以后,就需要明确目的,可视化是用来表达信息的一种方式

    2024年02月16日
    浏览(36)
  • opencv_c++学习(二十七)

    上图为针孔相机成像原理,蓝色坐标中的O即为镜头光心。成像原理与小孔成像相同。 单目相机映射关系如下: 将上式进行变换,就可以从三位空间映射到2维平面的公式。 相机的畸变公式如下: objectPoints:世界坐标系中3D点的三维坐标。 rvec:世界坐标系变换到相机坐标系的旋

    2024年02月06日
    浏览(42)
  • OpenCV(二十七):图像距离变换

    1.像素间距离 2.距离变换函数distanceTransform() void cv::distanceTransform ( InputArray  src, OutputArray dst, int   distanceType, int    maskSize, int     dstType = CV_32F ) src:输入图像,数据类型为CV8U的单通道图像 dst:输出图像,与输入图像具有相同的尺寸,数据类型为CV_8U或者CV_32F的单通道图像d

    2024年02月09日
    浏览(26)
  • 实验二十七 IPSec配置

    某公司由总部和分支机构构成,通过IPsec实验网络安全,保证总部和分支机构的局域 网安全通信。 IPSec(IP Security)是IETF定义的一组协议,用于增强IP网络的安全性 。 IPsec的功能可以划分为三类:认证头(AH)、封装安全负荷(ESP)、Internet密钥交换协议(IKE)。 1、认证头AH:提供了数据

    2024年02月07日
    浏览(37)
  • Python入门(二十七)测试(二)

    前面我们编写了针对单个函数的测试,下面来编写针对类的测试。很多程序中都会用到类,因此证明我们的类能够正确工作大有裨益。如果针对类的测试通过了,我们就能确信对类所做的改进没有意外地破坏其原有的行为。 Python在unittest.TestCase类中提供了很多断言方法。前面

    2024年02月10日
    浏览(75)
  • 鸿蒙开发笔记(二十七): 交互事件--手势

    gesture为通用的一种手势绑定方法,可以将手势绑定到对应的组件上。 例如,可以将点击手势TapGesture通过gesture手势绑定方法绑定到Text组件上。 priorityGesture是带优先级的手势绑定方法,可以在组件上绑定优先识别的手势。 在默认情况下,当父组件和子组件使用gesture绑定同类

    2024年01月25日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包