【问题标题】:traefik custom rule PathStrip does not matchtraefik 自定义规则 PathStrip 不匹配
【发布时间】:2017-08-12 02:48:51
【问题描述】:

在 traefik 中尝试客户规则 ..

应该

  • 从 url 中删除 /code 并根据其他匹配器将剩余部分发送到后端

示例网址:/code/rr; 只有 /rr 应该被发送到后端。看起来只有 /code 被发送到后端。

以下是我的规则,但不起作用..

      [frontends.f_rr]
       entrypoints = ["http","https"]
       priority = 10
         passHostHeader = true
       backend = "b_co"
        [frontends.f_co.routes.test_1]
        rule = "PathStrip: /code/; Path:/rr"

【问题讨论】:

    标签: traefik


    【解决方案1】:

    您应该使用PathPrefixStrip: /code 规则(并且仅此规则)。它捕获对/code 路径前缀的所有请求,但在转发到后端之前将其剥离。

    另请参阅https://docs.traefik.io/basics/#frontends 上的文档,特别是标题为路径匹配器使用指南的小节。

    【讨论】:

    • 实际上有多个后端,期望没有 /code 的 url .. 示例: /code/rr 到 backend_rr 只发送 /rr ; /code/kk 到 backend_kk 只发送 /kk ;
    • 我不确定这是否可能,但您可以尝试将 ReplacePath 修饰符添加到组合中。也就是说,试试PathPrefixStrip: /code; ReplacePath: /rr
    • 可能还有AddPrefix?现在正在打电话,所以我无法测试/检查。
    【解决方案2】:

    stripprefix 中间件也面临同样的问题。解决方法是在定义路由器和中间件之后,实际上需要将中间件分配给路由器以使其可用。否则它会被定义并创建但不会被使用(你可以使用 traefik 仪表板查看中间件是否被任何路由器使用)

    使用 docker 提供者:

      traefik.enable: true
      traefik.port: 9101
      # define router
      traefik.http.routers.my-router.rule: PathPrefix(`/my-router`)
      # only if accepts htpps
      traefik.http.routers.my-router.tls: true
      # strippath middleware
      traefik.http.middlewares.my-router-strip.stripprefix.prefixes: '/my-router'
      # assign to router, do n ot forget this bit
      traefik.http.routers.my-router.middlewares: my-router-strip@docker
      traefik.http.middlewares.my-router.stripprefix.forceslash: false
      traefik.http.routers.my-router.entrypoints: https, http
    

    【讨论】:

      猜你喜欢
      • 2019-12-20
      • 2018-07-13
      • 2022-08-14
      • 2021-04-07
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      相关资源
      最近更新 更多