Traefik - 将中间件应用于除特定路径之外的路由器

Traefik - apply middleware to router except a specific path

我使用 IP 白名单中间件来过滤我的 Web 应用程序仅对某些 IPS 的访问并且它有效。

但是,我想取消对特定路径的保护,使其成为public(路径是/api/transaction)。

目前,我有(在我的 docker-comose.yml 中):

varnish:
  labels:
    - "traefik.http.routers.api_varnish.rule=Host(`api.local`, `api`)"
    - "traefik.http.routers.api_varnish.tls=true"
    - "traefik.http.routers.api_varnish.middlewares=https-redirect@file"
    - "traefik.http.routers.api_varnish.middlewares=https-whitelist@file"
    - "traefik.http.services.api_varnish.loadbalancer.server.port=80"

这部分有效,然后我补充说:

    # Open middleware for payment IPN calls
   - "traefik.http.routers.api_varnish_transaction.rule=(Host(`api.local`, `api`) && PathPrefix(`/api/transaction`))"
   - "traefik.http.routers.api_varnish_transaction.tls=true"
   - "traefik.http.routers.api_varnish_transaction.priority=2"
   - "traefik.http.routers.api_varnish_transaction.middlewares=https-redirect@file"

我复制了这些行,但我没有将中间件 https-whitelist@file 应用到新主机。

它不起作用,我找不到正确的语法或不确定我是否可以做到?文档很差。

有什么想法吗?

有 2 个路由器,一个用于 /api/transaction,另一个用于 /* 并给第一个路由器更高的优先级(设置更高的数字),例如

# ...
    labels:
        - traefik.http.routers.router_1.priority=2

现在对 /api/transaction 的请求只会命中 router_1

https://doc.traefik.io/traefik/routing/routers/#priority