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

如何通过NGINX Ingress Controller将example.com永久重定向至example.com/login

实现根路径永久重定向至/login的Ingress配置修改方案

针对你现有的NGINX Ingress配置,要实现访问http://example.com(根路径/)时永久重定向到http://example.com/login,可以用以下两种方案修改:

方案一:新增根路径专属规则(推荐)

在现有Ingress的paths列表最顶部添加一个精确匹配根路径的规则,利用NGINX Ingress的重定向能力实现需求。修改后的完整配置如下:

{{- $root := . -}}
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: {{ include "ingress.name" . }}
  namespace: demo
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
    - host: "*.{{ .Values.host }}"
      http:
        paths:
          # 根路径重定向规则,放在最前面确保优先匹配
          - path: /
            backend:
              serviceName: dummy-service  # 无需实际存在,重定向在NGINX层面完成
              servicePort: 80
            pathType: Exact  # 精确匹配根路径,避免影响其他子路径
          {{- range $index, $service := .Values.deployments }}
          - path: {{ $service.pathPrefix }}(/|$)(.*)
            backend:
              serviceName: {{ $service.deploymentName }}
              servicePort: 80
          {{- end }}
---

细节说明:

  • pathType: Exact确保只有访问http://example.com(即请求路径为/)时触发重定向,不会干扰其他子路径的正常访问。
  • dummy-service可以是任意名称,甚至不存在的服务——因为NGINX会在转发到后端之前执行重定向,不会实际请求该服务。
  • 如果你的.Values.host就是example.com,也可以保持模板变量的一致性,无需硬编码域名。

如果不想修改原有Ingress,也可以单独创建一个负责根路径重定向的Ingress资源:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: root-redirect-ingress
  namespace: demo
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/permanent-redirect: /login
spec:
  rules:
    - host: "example.com"
      http:
        paths:
          - path: /
            backend:
              serviceName: dummy-service
              servicePort: 80
            pathType: Exact

方案二:通过配置片段实现重定向

直接在原有Ingress的注解中插入自定义NGINX配置,实现根路径的重定向:

{{- $root := . -}}
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: {{ include "ingress.name" . }}
  namespace: demo
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    # 新增根路径重定向的NGINX配置片段
    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($request_uri = '/') {
        return 301 /login;
      }
spec:
  rules:
    - host: "*.{{ .Values.host }}"
      http:
        paths:
          {{- range $index, $service := .Values.deployments }}
          - path: {{ $service.pathPrefix }}(/|$)(.*)
            backend:
              serviceName: {{ $service.deploymentName }}
              servicePort: 80
          {{- end }}
---

细节说明:

  • configuration-snippet注解允许直接插入NGINX配置代码,这里通过判断请求URI是否为/,返回301永久重定向到/login。
  • 这种方式无需新增路径规则,但要注意NGINX中if指令的使用限制——针对根路径的简单判断是安全的,不会引发问题。

注意事项

  1. 若你的NGINX Ingress Controller版本低于v0.21.0,不支持pathType字段,可省略该字段,但必须保证根路径规则在paths列表的最前面,确保优先匹配。
  2. 若需要临时重定向(HTTP 302),可将方案一中的permanent-redirect改为temporary-redirect,或方案二中的return 301改为return 302。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:11:37