【发布时间】: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