系统在做service mesh改造的时候,前端http请求调用后端微服务,走代理网关。
发现接口请求的时候状态码是426 Upgrade Required,需要升级http协议版本
image.png

原因

nginx 默认的http协议版本是1.0,需要升级到1.1

前端项目容器的基本镜像版本是 nginx:1.17.3
加挂的容器数据卷,nginx.conf 配置文件:

解决

增加配置:
proxy_http_version 1.1;

  1. # https://www.nginx.org.cn/question/detail/95
  2. upstream upserver {
  3. server 127.0.0.1:12349;
  4. ### keepalive 100;
  5. }
  6. server {
  7. listen 12347;
  8. location /hello {
  9. proxy_pass http://upserver;
  10. proxy_http_version 1.1; # 指定协议版本,默认 1.0
  11. proxy_set_header Connection ""; # 设置Connection为长连接(默认为no)
  12. }
  13. }

即upstream关闭 keepalive,但是server里明确指定 HTTP 1.1协议
通过tcpdump抓包可以看到nginx端使用HTTP 1.1协议请求upstream server,请求完毕之后发送FIN包关闭连接了!!!