EKS ALB Ingress配置非www域名转www时出现404错误及重定向失效的问题求助
解决EKS ALB Ingress非www到www重定向及404问题
我来帮你排查下这个配置里的问题,你遇到的404和重定向失效,核心是Ingress规则的逻辑顺序和host配置不完整导致的:
你的原配置存在的问题
- 重复Path规则冲突:在
test.com的host下,你定义了三个相同的path: /规则。ALB会按照规则顺序匹配请求,第一个ssl-redirect会处理HTTP到HTTPS的跳转,但当请求已是HTTPS时,第二个redirect-to-www会生效;但跳转到www.test.com后,你的Ingress里没有针对该域名的路由规则,ALB找不到对应后端服务,自然返回404。 - 缺失www域名路由规则:当你把host改成
www.test.com时,test.com的规则被移除,失去了重定向的来源,导致重定向完全失效。
修正后的Ingress配置
下面是调整后的完整配置,拆分了两个host规则,分别处理非www域名的重定向和www域名的正常服务转发:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: test name: test annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: instance kubernetes.io/ingress.class: alb # 确保证书同时覆盖test.com和www.test.com(你的两个ARN应该已包含) alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:ap-south-1:851874770356:certificate/ebdbe-4b05-b0a5-e8238533,arn:aws:acm:ap-south-1:8518746:certificate/734ffa35-3e17-497c-b5ca-5719e alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]' # HTTP转HTTPS的重定向动作 alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}' # 非www转www的重定向动作(301更利于SEO) alb.ingress.kubernetes.io/actions.redirect-to-www: > {"Type":"redirect","RedirectConfig":{"Host":"www.test.com","Port":"443","Protocol":"HTTPS","StatusCode":"HTTP_301"}} spec: rules: # 处理非www域名test.com的所有请求 - host: test.com http: paths: # 先把HTTP请求重定向到HTTPS - path: / pathType: Prefix backend: service: name: ssl-redirect port: name: use-annotation # 再把HTTPS的test.com请求重定向到www.test.com - path: / pathType: Prefix backend: service: name: redirect-to-www port: name: use-annotation # 处理www域名的正常服务转发 - host: www.test.com http: paths: # 先把HTTP请求重定向到HTTPS - path: / pathType: Prefix backend: service: name: ssl-redirect port: name: use-annotation # HTTPS请求转发到dashboard服务 - path: / pathType: Prefix backend: service: name: "dashboard" port: number: 3000
关键配置说明
- 拆分两个Host规则:明确区分
test.com(负责重定向)和www.test.com(负责服务转发),确保跳转到www域名后,ALB能找到对应后端服务,避免404。 - 调整重定向顺序:每个Host下都先处理HTTP到HTTPS的跳转,再处理业务逻辑(重定向或服务转发),保证所有请求最终都是HTTPS协议。
- 使用301永久重定向:把原配置的302改成301,更适合域名跳转场景,对搜索引擎友好。
验证步骤
- 应用修正后的Ingress配置:
kubectl apply -f your-ingress-file.yaml -n test - 等待ALB更新配置(通常需要1-2分钟)
- 访问
http://test.com,应先跳转到https://test.com,再跳转到https://www.test.com并正常加载dashboard服务。 - 访问
http://www.test.com,会直接跳转到https://www.test.com并加载服务。
内容的提问来源于stack exchange,提问作者raghunath
相关产品推荐
相关产品推荐

