【问题标题】:traefik V2 middlewares redirect-regex replace-regex not expanding variabletraefik V2 中间件重定向正则表达式替换正则表达式不扩展变量
【发布时间】:2022-10-20 22:26:20
【问题描述】:

我在 traefik V2 中遇到了重定向中间件的问题。 我们想在子位置添加一个斜杠,然后删除 带有 PathPrefix-Rule 的路径以从 docker 服务获取正确的路径。 (MkDOCS)

我们在 dynamic_conf.toml 中将 traefik 的规则定义为通用中间件:

[...]
[http.middlewares.add-trailing-slash.redirectregex]
    regex= "(https?://[^/]+/[a-z0-9_]+)$$"
    replacement= "$${1}/"
    permanent = true
[...]

目前这是 docker-run 中包含的标签文件:

traefik.enable=true
traefik.http.routers.dockerservice.entryPoints=websecure
traefik.http.routers.dockerservice.rule=PathPrefix(`/dockerservice`)
traefik.http.routers.dockerservice.tls=true
traefik.http.middlewares.dockerservice-strip.stripprefix.prefixes=/dockerservice
traefik.http.routers.dockerservice.middlewares=add-trailing-slash@file,doc-strip

https://regex101.com/,该规则似乎适用于例如https://domain.tld/dockerservice

如果服务启动并且我们导航到https://domain.tld/dockerservice 它重定向到https://domain.tld/${1}/ 变量未展开。相反,我们得到了 404-not found 错误(正如预期的那样,因为我们的 traefik 设置中不存在具有此名称的服务路由)

所以根据需要添加了尾部斜杠,但 dockerservice-capture 没有展开。

我们还尝试将此作为 docker-run 命令的 label_file 上的 @docker 规则,但“错误”仍然存在。

我们还尝试了我们首先在网上找到的这个(作为 dyanmic_conf 中的 @file 或 @docker 作为 docker run 的标签文件):

traefik.http.middlewares.add-trailing-slash.chain.middlewares=strip-prefix-1,strip-prefix-2
traefik.http.middlewares.strip-prefix-1.redirectregex.regex=^(https?://[^/]+/[a-z0-9_]+)$$
traefik.http.middlewares.strip-prefix-1.redirectregex.replacement=$${1}/
traefik.http.middlewares.strip-prefix-1.redirectregex.permanent=true
traefik.http.middlewares.strip-prefix-2.stripprefixregex.regex=/[a-z0-9_]+

我们尝试使用 ${0} 以及使用双引号、单引号或 $ 符号进行的多次其他尝试。

我们的工具链如下:

  • 推入主分支上的 git-repo
  • gitlab-runner 使用 docker build 和 docker run 命令执行 .sh 文件
  • 标签文件在 git-repo 中提供

我们希望为添加了此中间件的所有服务提供通用重定向 如果只添加了一个路径元素并且尾部斜杠缺失,则添加尾部斜杠

所以 https://domain.tld/dockerservice 应该重定向到 https://domain.tld/dockerservice/ 不应更改像 https://domain.tld/dockerservice/page 这样的请求,因为 mkdocs 容器中的条带仅需要/page

此时我们尝试了很多,我们不知道为什么 traefik 没有扩展变量。

有谁知道我们做错了什么?

最好的祝愿

实例字节

【问题讨论】:

    标签: docker url-routing gitlab-ci-runner traefik mkdocs


    【解决方案1】:

    我终于找到了一个非常适合我们目的的解决方案: 我只是将一个$ 与两个用于正则表达式选项的符号结合使用。

    在 traefik 本身的 dynamic.toml 中添加:

    [http.middlewares.add-trailing-slash.redirectRegex]
      regex= "(https?://[^/]+/[a-z0-9_]+)$$"
      replacement= "${1}/"
      permanent = true 
    

    lg 艾字节

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-27
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      相关资源
      最近更新 更多