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

Kubernetes Ingress问题:www域名访问404,主域名正常

问题

访问http://www.example.com时出现404错误,但https://example.com能正常访问。Ingress配置如下:

# Ingress
apiVersion: networking.k8s.io/v1
# make a new cert
kind: Ingress
metadata:
  name: ${APP_NAME}
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: 'true'
    nginx.ingress.kubernetes.io/from-to-www-redirect: 'true'
spec:
  defaultBackend:
    service:
      name: ${APP_NAME}
      port:
        number: 80
  tls:
  - secretName: ${APP_NAME}
    hosts:
    - ${URL}
    - www.${URL}

执行kubectl describe ingress后,返回结果显示host为example.com,怀疑是配置导致www域名无法正常重定向。

分析与解决
  • 问题根源:你的Ingress配置里未显式定义rules匹配www.example.com和example.com,仅靠defaultBackend和tls配置不足以让NGINX Ingress Controller正确处理www域名的HTTP请求重定向。虽然tls包含了www.${URL},但无对应路由规则时,HTTP(80端口)访问www.example.com会因找不到匹配规则返回404;而HTTPS的www.example.com能正常访问,是因为tls配置覆盖了该域名,请求会被defaultBackend承接。
  • 修复步骤:
    1. 在Ingress的spec中添加rules字段,明确匹配两个域名的请求:
      spec:
        rules:
        - host: example.com
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: ${APP_NAME}
                  port:
                    number: 80
        - host: www.example.com
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: ${APP_NAME}
                  port:
                    number: 80
        # 保留原有defaultBackend和tls配置
        defaultBackend:
          service:
            name: ${APP_NAME}
            port:
              number: 80
        tls:
        - secretName: ${APP_NAME}
          hosts:
          - ${URL}
          - www.${URL}
      
    2. 应用更新后的配置:
      kubectl apply -f your-ingress-file.yaml
      
    3. 验证配置生效:
      kubectl describe ingress ${APP_NAME}
      
      此时应能看到example.com和www.example.com两个host均被列出。
  • 注解生效条件:nginx.ingress.kubernetes.io/from-to-www-redirect: 'true'需要Ingress Controller识别到www域名的规则才会触发重定向逻辑,无对应rules时,控制器无法执行该重定向操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:10:31