美文网首页
基于 Traefik 如何实现 path 末尾自动加斜杠?

基于 Traefik 如何实现 path 末尾自动加斜杠?

作者: 东风微鸣 | 来源:发表于2022-12-26 09:14 被阅读0次

    前言

    Traefik 是一个现代的 HTTP 反向代理和负载均衡器,使部署微服务变得容易。

    Traefik 可以与现有的多种基础设施组件(Docker、Swarm 模式、Kubernetes、Marathon、Consul、Etcd、Rancher、Amazon ECS...)集成,并自动和动态地配置自己。

    系列文章:

    实践中,一个很常见的需求,用户输入的 url 是 ewhisper.cn/alert-manager, 如果什么都不做会返回 404, 需要自动加斜杠变成 ewhisper.cn/alert-manager/, 如何基于 Traefik on K8S 实现?

    答案是:用 redirectRegex MiddleWare + 正则。

    实战

    直接创建如下的 MiddleWare:

    apiVersion: traefik.containo.us/v1alpha1
    kind: Middleware
    metadata:
      name: auto-add-slash
    spec:
      redirectRegex:
        permanent: true
        regex: ^(https?://[^/]+/[-a-z0-9_]+)$
        replacement: ${1}/
    

    📝说明如下:

    正则匹配的内容为:

    • ^(https?: 以 https 或 http 开头的内容;? 表示匹配前一个字符 0 或 1
    • [^/]+/: 匹配 URL 第一个 / 之前的内容
    • [-a-z0-9_]+: 匹配第一个 / 之后的内容,往往为字母数字和中划线及下划线

    最终,^(https?://[^/]+/[-a-z0-9_]+)$ 该 group 匹配的内容示例如:https://ewhisper.cn/monitor-alertmanager, 并将其替换为:${1}/, 即将匹配的 group 后面加上 /, 示例如:https://ewhisper.cn/monitor-alertmanager

    🐾 注意:

    上面的 MiddleWare 可能无法适应所有的情况, 读者可以领会其要点, 并根据自己的需求做适当调整.

    IngressRoute 使用

    直接这样使用:

    apiVersion: traefik.containo.us/v1alpha1
    kind: IngressRoute
    metadata:
      name: alertmanager
    spec:
      routes:
        - kind: Rule
          match: Host(`ewhisper.cn`) && PathPrefix(`/alertmanager`)
          middlewares:
            - name: auto-add-slash
          services:
            - name: alertmanager
              port: 9093
    

    🎉🎉🎉 完成!

    EOF

    三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

    相关文章

      网友评论

          本文标题:基于 Traefik 如何实现 path 末尾自动加斜杠?

          本文链接:https://www.haomeiwen.com/subject/tvknqdtx.html