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

多域名同路径下Kubernetes Ingress(Nginx)差异化路由咨询

在Kubernetes Nginx Ingress中实现按域名区分静态资源路由

完全可以实现,核心思路是通过主机名匹配结合路径重写,或者为不同域名配置独立的Ingress规则,让相同路径的请求指向不同的静态资源存储位置。以下是两种实用的实现方案:

方案一:为每个域名配置独立Ingress规则(指向不同后端服务)

如果两个域名的favicon.ico分别存放在不同的后端服务中,可以创建一个包含多主机规则的Ingress资源,示例如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: favicon-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  ingressClassName: nginx
  rules:
  - host: foo.bar.one.com
    http:
      paths:
      - path: /static(/favicon.ico)
        pathType: ImplementationSpecific
        backend:
          service:
            name: static-service-one
            port:
              number: 80
  - host: foo.bar.two.com
    http:
      paths:
      - path: /static(/favicon.ico)
        pathType: ImplementationSpecific
        backend:
          service:
            name: static-service-two
            port:
              number: 80

说明:

  • 利用正则捕获路径中的favicon.ico,通过rewrite-target: /$2将请求重写为后端服务根路径下的favicon.ico。
  • static-service-one和static-service-two需分别挂载存储对应域名favicon.ico的存储卷(如PVC),或直接在容器内放置对应文件。

方案二:同一后端服务下区分目录(通过路径重写)

如果两个favicon.ico存放在同一个后端服务的不同目录中(比如/static/one/favicon.ico和/static/two/favicon.ico),可以为每个域名创建独立Ingress资源并配置专属重写规则:

针对foo.bar.one.com的Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: favicon-one-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /static/one/favicon.ico
spec:
  ingressClassName: nginx
  rules:
  - host: foo.bar.one.com
    http:
      paths:
      - path: /static/favicon.ico
        pathType: Exact
        backend:
          service:
            name: static-service
            port:
              number: 80

针对foo.bar.two.com的Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: favicon-two-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /static/two/favicon.ico
spec:
  ingressClassName: nginx
  rules:
  - host: foo.bar.two.com
    http:
      paths:
      - path: /static/favicon.ico
        pathType: Exact
        backend:
          service:
            name: static-service
            port:
              number: 80

说明:

  • 每个Ingress仅匹配对应域名的请求,通过rewrite-target将原路径/static/favicon.ico重写为服务内的目标文件路径。
  • pathType: Exact确保仅精确匹配指定路径,避免意外匹配其他路径。

注意事项

  • 确保使用的是官方Nginx Ingress Controller(kubernetes/ingress-nginx),第三方Ingress Controller的注解和规则语法可能存在差异。
  • 若直接通过Ingress Controller提供静态资源(无需后端服务),可配置nginx.ingress.kubernetes.io/static-files注解挂载存储卷,但这种方式不如后端服务灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:24:30