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

使用nginx-ingress能否将域名直接路由到后端服务路径?

Nginx Ingress 域名路由到后端指定路径的正确配置方法

你遇到的错误是因为Kubernetes Networking v1版本的Ingress API规范中,backend.service字段下根本不存在path这个配置项,所以API服务器校验时直接报错了。

要实现域名根路径映射到后端服务的指定路径,得用Nginx Ingress Controller提供的路径重写注解,具体配置方式如下:

方式1:分两个Ingress对象(逻辑更清晰)

针对两个域名分别创建Ingress,每个单独配置重写规则:

foo.example.com 的Ingress配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foo-service-ingress
  annotations:
    # 开启正则匹配,用于传递子路径
    nginx.ingress.kubernetes.io/use-regex: "true"
    # 重写目标路径,$1对应捕获到的子路径内容
    nginx.ingress.kubernetes.io/rewrite-target: /myapp/gui/$1
spec:
  rules:
  - host: foo.example.com
    http:
      paths:
      - path: /(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: my-service
            port:
              name: http

bar.example.com 的Ingress配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: bar-service-ingress
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /different/path/here/$1
spec:
  rules:
  - host: bar.example.com
    http:
      paths:
      - path: /(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: my-service
            port:
              name: http

方式2:单个Ingress对象统一配置

如果想把两个域名的规则写到同一个Ingress里,可以用nginx.ingress.kubernetes.io/server-snippet注解自定义Nginx原生配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: multi-host-ingress
  annotations:
    nginx.ingress.kubernetes.io/server-snippet: |
      server {
        listen 80;
        server_name foo.example.com;
        location / {
          proxy_pass http://my-service.default.svc.cluster.local/myapp/gui/;
          proxy_set_header Host $host;
        }
      }
      server {
        listen 80;
        server_name bar.example.com;
        location / {
          proxy_pass http://my-service.default.svc.cluster.local/different/path/here/;
          proxy_set_header Host $host;
        }
      }
spec:
  ingressClassName: nginx

关键说明

  • 如果不需要传递子路径(仅映射根路径/到后端指定路径),可以简化配置:去掉use-regex注解,将path设为/,rewrite-target直接写目标路径(比如/myapp/gui/)。
  • 确保集群已正确部署Nginx Ingress Controller,且Ingress对象指定了正确的ingressClassName: nginx(若集群存在多个Ingress Controller)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:10:28