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

如何使用Nginx Ingress Controller重定向至指定路径

实现多租户根路径定向到/app(Nginx Ingress + AWS L4 NLB)

方案一:通过server-snippet实现

完全可以用server-snippet实现精确的根路径重定向,不会影响其他子路径。直接在Ingress资源的注解中插入Nginx规则,针对请求URI精确匹配/时触发重定向:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: multi-tenant-ingress
  annotations:
    nginx.ingress.kubernetes.io/server-snippet: |
      if ($request_uri = '/') {
        return 302 /app;
      }
    # 保留你已配置的AWS L4 NLB相关注解(如SSL终止配置)
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - subdomain.domain.com
    secretName: your-ssl-secret
  rules:
  - host: subdomain.domain.com
    http:
      paths:
      - path: /app
        pathType: Prefix
        backend:
          service:
            name: app-service
            port:
              number: 80
      - path: /api/v1
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 80

说明

  • 该规则仅对**精确匹配/**的请求生效,subdomain.domain.com/api/v1等子路径会正常转发到对应后端服务。
  • 由于AWS L4 NLB仅做四层转发,SSL终止在Nginx Ingress Controller层面,重定向逻辑完全由Nginx处理,不受LB影响。

方案二:单独配置根路径Ingress规则

如果不想使用Nginx原生snippet,可以通过声明式的Ingress规则实现根路径重定向,更符合K8s资源管理风格:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: root-redirect-ingress
  annotations:
    nginx.ingress.kubernetes.io/temporary-redirect: /app
    # 如需永久重定向,替换为:nginx.ingress.kubernetes.io/permanent-redirect: /app
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - subdomain.domain.com
    secretName: your-ssl-secret
  rules:
  - host: subdomain.domain.com
    http:
      paths:
      - path: /
        pathType: Exact
        backend:
          service:
            name: dummy-service # 指向集群内任意存在的服务即可,重定向在Ingress层触发
            port:
              number: 80
---
# 处理其他业务路径的Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: multi-tenant-service-ingress
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - subdomain.domain.com
    secretName: your-ssl-secret
  rules:
  - host: subdomain.domain.com
    http:
      paths:
      - path: /app
        pathType: Prefix
        backend:
          service:
            name: app-service
            port:
              number: 80
      - path: /api/v1
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 80

说明

  • 单独创建Ingress匹配精确的/路径,通过重定向注解直接返回跳转响应,无需请求到达后端。
  • dummy-service只需是集群中存在的任意服务(比如最小的echo服务),因为重定向逻辑在Ingress层完成,不会实际转发请求到该服务。

不推荐的方案:后端服务处理重定向

如果将重定向逻辑放在后端服务的根路径接口中,虽然能实现需求,但会增加请求链路开销(请求需到达后端再返回重定向),且多租户场景下需要在每个租户服务中重复配置,维护成本更高,因此优先选择Ingress层的处理方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:15:43