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

Nginx反向代理OpenShift Istio入口网关503问题排查

问题根因

你的配置有两个核心错误,直接导致Istio网关无法匹配路由返回503:

  1. Host头传递错误:你配置了proxy_set_header Host $http_host;,会把客户端访问Nginx时的Host值(也就是my-ngnix-hostname-here)直接传给上游Istio Ingress网关。而OpenShift Route、Istio VirtualService都是靠Host头匹配路由规则的,网关只识别ingress-robot.apps.gen1.com这个Host,收到未知Host直接返回默认的「应用不可达」503页面,这也是你直接访问网关能通、走Nginx不通的核心原因。
  2. 缺少上游TLS SNI配置:Istio托管的Ingress网关是多域名复用的,TLS握手阶段必须携带正确的SNI(即目标域名)才能返回对应证书、进入正确的路由匹配链。你当前配置没有开启上游SNI,网关握手阶段拿不到目标域名信息,即使IP连通也会路由失败。

另外还有三个配置隐患:

  • 你当前server块配置的server_name ingress-robot.apps.gen1.com和实际访问的Nginx域名my-ngnix-hostname-here不匹配,这个server块只是作为默认虚拟主机生效,后续如果加其他站点配置很容易出现路由冲突。
  • 配置里写的ssl on;是Nginx 1.15版本前的旧语法,当前版本只要在listen指令后加ssl参数即可,保留旧指令会抛出配置警告。
  • 配置里允许了TLSv1、TLSv1.1这两个已经被Istio默认禁用的不安全协议,后续可能出现TLS握手失败问题。
修正后的Nginx配置
upstream RobotBalance {
    # 建议直接填写Ingress网关的实际IP,避免Nginx启动时域名解析失败、后续解析结果缓存不更新的问题
    # 多节点负载均衡直接在这追加其他网关节点IP即可
    server 10.55.111.245:443;
    keepalive 64; # 开启上游长连接,适配HTTP/2,减少握手开销
}

log_format basic '$remote_addr - $remote_user [$time_local] '
                 '"$request"   $status   $bytes_sent '
                 '"$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
server {
    listen 443 ssl http2;
    # 填写Nginx实际对外提供服务的域名
    server_name my-ngnix-hostname-here;

    ssl_certificate /opt/nginx/ssl/cert.crt;
    ssl_certificate_key /opt/nginx/ssl/cert.key;
    ssl_session_timeout 10m;
    # 移除不安全的TLSv1、TLSv1.1,适配Istio默认TLS策略
    ssl_protocols TLSv1.2 TLSv1.3;

    location / {
        access_log logs/robot_balance.log basic;
        error_log logs/robot_balance_error.log debug;

        # 核心修正:Host头传递网关侧已配置路由的目标域名
        proxy_set_header Host               ingress-robot.apps.gen1.com;
        proxy_set_header X-Real-IP          $remote_addr;
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Port   $server_port;
        proxy_set_header X-Forwarded-Proto  $scheme;
        add_header X-Upstream $upstream_addr always;

        # 核心修正:开启上游TLS SNI,指定SNI值和Host头一致
        proxy_ssl_server_name on;
        proxy_ssl_name ingress-robot.apps.gen1.com;
        # 用私有CA校验上游网关证书,避免中间人攻击
        proxy_ssl_trusted_certificate /opt/nginx/ssl/root_ca_united.pem;
        proxy_ssl_verify on;

        # 适配长连转发
        proxy_http_version 1.1;
        proxy_set_header Connection "";

        proxy_pass https://RobotBalance;
    }
}
对接Istio/OpenShift Ingress网关的特殊配置要求
  • 禁止随意透传客户端Host头:除非你的Nginx对外服务的域名已经在OpenShift/Istio侧配置了对应路由,否则必须手动把Host头设置为网关侧认可的目标域名,否则一定会出现路由不匹配的问题。
  • 必须配置上游SNI:所有复用443端口承载多域名的网关(包括Istio、Nginx Ingress、OpenShift Router)都依赖SNI做证书和路由匹配,反代HTTPS上游时必须开启SNI并设置正确的域名值。
  • 不要随意改写请求路径:除非你明确在Istio侧配置了路径重写规则,否则不要在Nginx层加rewrite规则修改请求路径,否则会匹配不到上游路由。
  • 对齐TLS协议版本:Istio 1.10+默认禁用TLS 1.0/1.1,Nginx侧不要配置这两个过时协议,避免握手失败。
  • 建议开启上游长连接:Istio Envoy对短连接的处理性能较差,配置upstream长连接可以大幅提升转发稳定性和吞吐量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:06:17