nginx代理ambassador出现426错误

现在ambassador文档啃得差不多了。进入实战阶段。

一开始,就偶遇426错误。

网络结构大致如下:

浏览器访问nginx,

nginx代理到k8s内的ambassador,

ambassador代理到k8s内的service。

别问为什么这么复杂,

还有更复杂的。

比如,ambassador代理到k8s内的nginx,

nginx再代理到k8s集群外的服务。

多一层代理,多一层灵活和控制,

看场景和心态啦。

最后,解决靠了百度。

URL:

https://blog.csdn.net/pushme_pli/article/details/88411373

426(https://httpstatuses.com/426)表示服务器拒绝浏览器使用当前协议发送的请求。

懵逼了,

原来这个protocol指的是HTTP的version,而罪魁祸首是nginx。具体来讲是:

  • browser使用HTTP 1.1发送request到nginx
  • nginx使用HTTP 1.0(https://serverfault.com/questions/442960/nginx-ignoring-clients-http-1-0-request-and-respond-by-http-1-1)把request重定向到ambassador(Envoy)
  • Envoy受不了HTTP 1.0,要求升级为1.1,所以抛出426

那好办了,让nginx重定向时使用HTTP1.1,在nginx的router rule中加入:

proxy_http_version 1.1;
proxy_set_header Connection "";

猜你喜欢

转载自www.cnblogs.com/aguncn/p/11577866.html