最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

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

来源:博客园


(资料图片仅供参考)

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

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

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

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

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

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

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

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

背后原因

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

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

Mistake 3: Not Enabling Keepalive Connections to Upstream Servers

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

关键词: