背景
此前將公司的幾個服務進行了服務網格的技術改造,其中一個應用是為H5提供Http接口,在改造之前,H5通過域名調用后台接口,請求經過nginx進行轉發,轉發的目標是阿里雲SLB(阿里雲負載均衡產品)的ip端口,服務網格改造后,Nginx的轉發目標變成了k8s的ingress網關的ip端口,接着問題就出現了,接口調不通,Http返回426 Upgrade Required。
解決辦法
426 Upgrade Required解釋
該錯誤碼意思是客戶端需要升級協議版本
導致原因和解決辦法
原因
Istio使用Envoy作為數據面轉發HTTP請求,而Envoy默認要求使用HTTP/1.1或HTTP/2,當客戶端使用HTTP/1.0時就會返回426 Upgrade Required,如果用nginx進行proxy_pass反向代理,默認會用 HTTP/1.0
解決:nginx顯示指定 proxy_http_version為1.1
修改nginx的配置文件nginx.conf,顯示指定代理proxy_http_version為1.1,代碼如下
server { ... location /http/path/ { proxy_http_version 1.1; proxy_pass http://ip:port; } }
參考:https://blog.csdn.net/qq_31279701/article/details/120535554