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

如何为Ingress-Nginx的特定路径配置URL重写规则?

实现方案说明

Ingress-Nginx的所有注解默认作用于整个Ingress资源下的所有路径,无法直接针对单个Path单独设置注解。要实现仅指定路径重写,有两种常用方案:


方案一:拆分多个Ingress资源(官方推荐,易维护)

将需要重写的路径和不需要重写的路径拆分到不同的Ingress资源中,不同Ingress可以独立配置注解,不会互相影响。

  1. 不需要重写的根路径Ingress配置:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
  name: ingress-root
spec:
  # 保留原有TLS配置即可
  rules:
    - host: somehost.westeurope.cloudapp.azure.com
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: client-svc
              port:
                number: 80
  1. 需要重写的路径Ingress配置(示例实现/rest-smtp-sink/xxx重写为/xxx、/backend/xxx重写为/xxx):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  name: ingress-rewrite
spec:
  # 保留原有TLS配置即可
  rules:
    - host: somehost.westeurope.cloudapp.azure.com
      http:
        paths:
        - path: /rest-smtp-sink(/|$)(.*)
          pathType: Prefix
          backend:
            service:
              name: rest-smtp-sink-svc
              port:
                number: 80
        - path: /backend(/|$)(.*)
          pathType: Prefix
          backend:
            service:
              name: server-svc
              port:
                number: 80

Ingress-Nginx会自动合并同一域名下的所有Ingress规则,路径匹配时优先匹配更长的前缀,不会出现规则冲突。


方案二:单Ingress使用自定义配置片段

如果不想拆分Ingress资源,可以通过nginx.ingress.kubernetes.io/configuration-snippet注解直接编写Nginx重写规则,仅匹配指定路径生效:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^/rest-smtp-sink(/|$)(.*) /$2 break;
      rewrite ^/backend(/|$)(.*) /$2 break;
  name: ingress
spec:
  rules:
    - host: somehost.westeurope.cloudapp.azure.com
      http:
        paths:
        - path: /rest-smtp-sink
          pathType: Prefix
          backend:
            service:
              name: rest-smtp-sink-svc
              port:
                number: 80
        - path: /backend
          pathType: Prefix
          backend:
            service:
              name: server-svc
              port:
                number: 80
        - path: /
          pathType: Prefix
          backend:
            service:
              name: client-svc
              port:
                number: 80

该方案需要熟悉Nginx语法,避免自定义规则和Ingress-Nginx默认生成的规则冲突,仅适合特殊场景使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:45:03