nginx在代理到upstream时转换http1.1为http1.0,长连接转为短连接

nginx在代理到upstream时的默认行为#

最近准备用openresty替换nginx,替换的效果当然是需要保证效果和nginx一致,不然可能就会导致线上在用的服务出现问题。

替换成openresty后,在本地进行了一个请求,header如下:

Copy
POST /servlet/json HTTP/1.1 Host: 10.80.121.xxx:9900 Connection: keep-alive Content-Length: 423 Content-Type: application/x-www-form-urlencoded Cookie: JSESSIONID=abcciHlT1nqAi571RB6Hy Accept: */* User-Agent: maios/3.9.0 (iPhone; iOS 13.5.1; Scale/2.00) Accept-Language: zh-Hans-CN;q=1 Accept-Encoding: gzip, deflate

在经过nginx转发到upstream后,发现请求竟然变了:

Copy
POST /servlet/json HTTP/1.0 Host: 10.80.121.xxx Connection: close Content-Length: 423 Content-Type: application/x-www-form-urlencoded Cookie: JSESSIONID=abcciHlT1nqAi571RB6Hy Accept: */* User-Agent: maios/3.9.0 (iPhone; iOS 13.5.1; Scale/2.00) Accept-Language: zh-Hans-CN;q=1 Accept-Encoding: gzip, deflate

主要的变化有两处,一个是版本从1.1变成1.0,另一个是keep-alive变成了close。

image-20230602143449380

一开始,还以为是openresty搞的鬼,结果发现nginx自己也是这样。

背后原因#

在nginx文档,http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version,显示:

image-20230602143623434

网上一搜,有相关的文档,里面也有强制使用http1.1的方案:

Mistake 3: Not Enabling Keepalive Connections to Upstream Servers

https://www.nginx.com/blog/avoiding-top-10-nginx-configuration-mistakes/#no-keepalives




posted @   三国梦回  阅读(824)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2020-06-02 曹工说Spring Boot源码(29)-- Spring 解决循环依赖为什么使用三级缓存,而不是二级缓存
点击右上角即可分享
微信分享提示
CONTENTS