You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx调用image-api原生URL返回426状态码,Istio URL正常求助

问题分析与解决

问题概述

  • image-api服务在Pod内部可正常访问,直接执行curl image-api.gateways.svc.cluster.local:8000能获取预期数据
  • Nginx调用image-api.main.svc.cluster.local:8000时返回426状态码,替换为Istio的image-api.gateways.svc.cluster.local:8000则返回200
  • 当前使用的Nginx配置如下:
worker_processes 8;

events {
    worker_connections 1024;
}

http {
    resolver kube-dns.kube-system valid=10s;

    server_tokens off;

    server {
        listen 8080;

        location ~ ^/(\w+) {
            # ISTIO URL
        proxy_pass http://image-api.gateways.svc.cluster.local:8000$request_uri;
            # MAIN URL
#       proxy_pass http://image-api.main.svc.cluster.local:8000$request_uri;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

426状态码说明

426 Upgrade Required表示服务器拒绝处理当前请求,除非客户端升级到指定协议。这意味着image-api.main.svc.cluster.local的服务实例对请求协议或请求头有特定要求,而Istio网关自动处理了这些要求,Nginx默认配置未满足。

修复方案

1. 强制启用HTTP/2协议转发

如果image-api.main后端仅支持HTTP/2,Nginx默认用HTTP/1.1转发会触发错误。修改Nginx配置:

location ~ ^/(\w+) {
    proxy_pass http://image-api.main.svc.cluster.local:8000$request_uri;
    proxy_http_version 2.0;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

2. 处理协议升级请求

若服务要求客户端发起协议升级(比如WebSocket或HTTP/1.1到HTTP/2的升级),添加对应请求头:

location ~ ^/(\w+) {
    proxy_pass http://image-api.main.svc.cluster.local:8000$request_uri;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

3. 对比请求头差异

在image-api的Pod中开启请求日志,分别记录Istio网关和Nginx转发的请求头,找出缺失的字段后在Nginx中补充proxy_set_header配置。

4. 验证服务协议要求

在Pod内执行curl -v image-api.main.svc.cluster.local:8000,查看响应头中的Upgrade字段,确认服务需要的目标协议,再针对性调整Nginx配置。


内容的提问来源于stack exchange,提问作者Arman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:07:37