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

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

前言

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}/
YAML

📝说明如下:

正则匹配的内容为:

  • ^(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
YAML

🎉🎉🎉 完成!

EOF

相关文章
|
2月前
|
应用服务中间件 网络安全 nginx
nginx配置去掉路径中的指定字符
【6月更文挑战第25天】nginx配置去掉路径中的指定字符
46 0
|
3月前
|
弹性计算 Kubernetes 中间件
基于 Traefik 如何实现向后转发自动去掉前缀?
基于 Traefik 如何实现向后转发自动去掉前缀?
|
12月前
|
Ubuntu Linux Perl
如何使用 sed 替换文件中的字符串?
如何使用 sed 替换文件中的字符串?
175 0
|
Web App开发 搜索推荐 开发者
Flask 路由处理 URL 路径末尾带斜线或不带斜线机制
Flask 路由处理 URL 路径末尾带斜线或不带斜线机制
248 0
|
关系型数据库 MySQL
全局替换字符命令
全局替换字符命令
59 0
|
JavaScript
【BUG日记】【JS】replace()方法没有像后端那样有replaceAll(),匹配全文替换的时候,发现替换时间(2021/10/13)/g正则用不了
【BUG日记】【JS】replace()方法没有像后端那样有replaceAll(),匹配全文替换的时候,发现替换时间(2021/10/13)/g正则用不了
146 0
【BUG日记】【JS】replace()方法没有像后端那样有replaceAll(),匹配全文替换的时候,发现替换时间(2021/10/13)/g正则用不了
|
Java
http请求中加号被替换为空格?源码背后的秘密(2)
http请求中加号被替换为空格?源码背后的秘密(2)
133 0
http请求中加号被替换为空格?源码背后的秘密(2)
|
程序员 应用服务中间件
http请求中加号被替换为空格?源码背后的秘密(1)
http请求中加号被替换为空格?源码背后的秘密(1)
187 0
http请求中加号被替换为空格?源码背后的秘密(1)
|
Java 程序员
http请求中加号被替换为空格?源码背后的秘密(3)
http请求中加号被替换为空格?源码背后的秘密(3)
258 0
http请求中加号被替换为空格?源码背后的秘密(3)
|
SQL 前端开发 Java
SpringBoot项目,如何优雅的把接口参数中的空白值替换为null值?
SpringBoot项目,如何优雅的把接口参数中的空白值替换为null值?
SpringBoot项目,如何优雅的把接口参数中的空白值替换为null值?