CloudFront重定向异常:访问自定义域名被跳转至Istio NLB地址
问题描述
我已搭建EKS环境并部署Istio以暴露应用,创建指向Istio NLB的CloudFront分发后,访问abc123.cloudfront.net会被重定向至NLB地址abc-123.elb.us-east-2.amazonaws.com,无法保留原域名。配置自定义域名example.com作为别名后,仍存在该重定向问题。执行curl命令持续收到301状态码:
curl --head --location https://example.com HTTP/2 301 content-length: 0 location: https://abc-123.elb.us-east-2.amazonaws.com/ date: Sun, 28 Jan 2024 21:52:30 GMT server: istio-envoy x-cache: RefreshHit from cloudfront via: 1.1 93fdc54a207de431301d71c9b3644446.cloudfront.net (CloudFront) x-amz-cf-pop: GRU3-P5 x-amz-cf-id: O4Jr0UNuqtEN_DzuVSl9EIh3f0WZZK4hI7mVnwYySM0Zn3esBLCOlg== age: 3612
已尝试操作:
- 搭建EKS环境,部署Istio(Gateway/VirtualService)暴露应用
- 创建指向Istio NLB的CloudFront分发
- 配置自定义域名
example.com作为别名
预期效果:
- 访问
abc123.cloudfront.net时保留原域名,而非重定向至NLB地址 - 自定义域名
example.com可正常访问无重定向
实际问题:curl请求持续返回301状态码,存在重定向问题。请问导致该301重定向、无法保留自定义域名的原因是什么?
可能的原因及排查方案
1. Istio 配置未覆盖目标域名
从响应头的server: istio-envoy可以确定,301重定向由Istio的Envoy代理返回,而非CloudFront。核心原因是Istio未正确识别请求的Host头:
- 检查Gateway的
tls.hosts字段,是否包含abc123.cloudfront.net和example.com,如果只配置了NLB域名,Envoy会将其他Host的请求重定向到NLB地址 - 检查VirtualService的
hosts列表,是否覆盖了所有需要访问的域名,若VirtualService仅匹配NLB域名,会触发路由重定向逻辑 - 排查Istio是否存在强制重定向到固定域名的HTTP路由规则
2. CloudFront 未保留原始Host头
CloudFront默认会将请求的Host头替换为源站(NLB)的域名,导致Istio收到的Host是NLB地址,进而触发重定向:
- 进入CloudFront分发的源设置,确认是否开启了自定义HTTP头,将
Host头设置为Viewer Host Header(保留用户请求的原始Host)。若未配置,CloudFront会传递NLB域名作为Host,Istio无法匹配预期域名,返回301
3. NLB 与 Istio Gateway 协议/端口不匹配
- 若NLB配置HTTPS端口,但Istio Gateway监听HTTP端口,Envoy可能错误地将请求重定向到NLB的HTTPS地址
- 检查NLB的监听协议是否与Istio Gateway的协议一致,排查TLS终止配置冲突(比如NLB终止TLS后转发HTTP到Istio,而Istio Gateway期望HTTPS请求,触发重定向)
4. 后端应用硬编码重定向地址
虽然响应头显示由istio-envoy返回301,但仍需排查后端应用是否存在硬编码NLB域名作为跳转目标的逻辑,导致Istio转发重定向响应时保留了该地址
内容的提问来源于stack exchange,提问作者Yano
相关产品推荐
相关产品推荐

