,因为'请求头的值'为空,'不会传递'该请求头给'后端'服务器一 长连接和短连接概念1) 'HTTP'的长连接和短连接本质上是'TCP'长连接和短连接2) 在'HTTP/1.0'中默认使用'短'连接.也就是说,客户端和服务器'每进行一次HTTP操作',就'建立一次tcp连接',任务结束就中断连接长连接和短连接的形象比喻二 nginx如何做到长连接重点:'服务器'和'客户端'都要进行设..._nginx 长连接">
当前位置:   article > 正文

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

nginx 长连接

一    长连接和短连接概念

  1. 1) 'HTTP'的长连接和短连接'本质'上是'TCP'长连接和短连接
  2. 2) 在'HTTP/1.0'中默认使用'短'连接;
  3. 解读:客户端和服务器'每进行一次HTTP操作',就'建立一次tcp连接',任务结束就'中断'连接

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

二   nginx如何做到长连接

  1. 重点:'服务器''客户端'都要进行设置,也即'长连接'要客户端和服务端都支持
  2. 思考:哪些场景必须使用'长连接'? -->已知:'chunk''websocket'

①    clientnginx 保持长连接

1)keepalive_timeout

2)keepalive_requests

 

 了解keepalive_disable即可

3)keepalive_timeout 和 keepalive_request 关系

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

1)典型的配置

  1. 让nginx和后端server"[nginx称为upstream]"之间保持长连接
  2. http {
  3. upstream backend {
  4. ...
  5. keepalive 300; // 这个很重要,一般'默认'
  6. }
  7. location / {
  8. proxy_pass http://backend;
  9. proxy_http_version 1.1; # 设置http版本为1.1
  10. # 机制:转发请求头为空字符串,不会透传
  11. # 由于HTTP/1.1不指定Connection,默认是'keepalive'长连接
  12. proxy_set_header Connection ""; # 设置Connection为长连接
  13. }
  14. }

2)upstream的keepalive指令设置

  1. 说明: 一般保持'默认'值即可
  2. 含义: nginx向这'一组'upstream中,最多'保持'多少个'空闲的tcp连接'用于'http keepalive'请求

官方keepalive指令解读

关于 Nginx upstream keepalive 的说明

keepalive_requests keepalive_time 

 2) proxy_http_version

3)proxy_set_header 

  1. proxy_set_header Connection ""; 设置为""空值,则'不会传递'给后端服务器,相当于不指定'Connection'请求头
  2. # proxy_set_header Connection 默认是'close',会'关闭'长连接;
  3. # HTTP/1.1,如果不指定'Connection'请求头,默认值是'keep-alive',长连接
  4. 思考:HTTP/1.0如何建立长连接,协议'不一致'场景

  http协议中connection头的作用

  Connection RFC解释

④  了解ntlm即可

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

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

三      高级技巧

  1. 说明:关于'upstream'中的'keepalive'指令不再赘述
  2. 备注:只列出两个'核心'配置
  3. 核心:客户端自定义'请求头',决定'是否使用'长连接

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

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

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

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

四    案例

①    现象

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

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

②    解决策略

  1. 背景:'nginx和upstream'之间通信,'nginx侧'未配置'长连接'导致
  2. +++++++ location中'设置如下'即可 +++++++
  3. proxy_http_version 1.1; # 设置http版本为1.1
  4. proxy_set_header Connection ""; # 设置Connection为长连接

③     chunk分片传输原理

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

④      nginx的chunk模块 

  1. 一个是'内置的ngx_http_chunked_filter_module',是一个filter的模块,是'默认编译'进去的
  2. 1) 必须是'开启长连接'的HTTP/1.1
  3. 2) 请求和响应双方必须'同时存在'该头

其它参考 

 ⑤    nginx关闭chunked

  1. ++++++++++++'取消掉Transfer-Encoding:chunked'++++++++++++
  2. 方式1:'不让'服务器"这里特指nginx的后端服务器"返回Transfer-Encoding:chunked,在客户端"nginx端"请求的时候可以'使用http 1.0'的协议。
  3. 方式2:'nginx侧'-->chunked_transfer_encoding off;
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/733248?site
推荐阅读
相关标签
  

闽ICP备14008679号