如何将子域名重定向至指定路径及Traefik Docker标签下Kibana重定向失效问题
我来帮你一步步搞定这两个Traefik配置问题:
问题1:把subdomain.mydomain.com重定向到subdomain.mydomain.com/path/subpath
从你用的标签字段(比如frontend)来看,应该是在用Traefik v1版本,那咱们直接用v1的重定向规则来配置就行。给你的Docker容器加这几个标签:
traefik.enable=true traefik.frontend.rule=Host:subdomain.mydomain.com traefik.frontend.redirect.regex=^https?://subdomain.mydomain.com/?$ traefik.frontend.redirect.replacement=https://subdomain.mydomain.com/path/subpath traefik.frontend.redirect.permanent=true
简单解释下:
regex用来精准匹配根域名的访问(不管末尾带不带斜杠都能命中)replacement就是你要跳转到的目标路径permanent=true是做301永久重定向,要是想临时跳转(302)就改成false
如果之后升级到Traefik v2,规则会换成中间件的方式,但目前用v1的话上面这套完全够用。
问题2:Kibana用子域名访问时,不自动跳转到/app/kibana
这个问题我碰到过好几次,核心是Kibana不知道自己是通过代理的子域名提供服务的,加上Traefik的路由规则没配合好。咱们分两步解决:
第一步:修改Kibana的配置文件
找到你的kibana.yml(如果是Docker部署,要么在容器里,要么是挂载的本地文件),加上这两行:
server.basePath: "/app/kibana" server.rewriteBasePath: true
server.basePath告诉Kibana它的服务根路径是/app/kibana,rewriteBasePath会帮它自动处理请求路径的转换,这样不管是直接访问根路径还是带路径的请求,Kibana都能正确识别。
记得把修改后的kibana.yml挂载到Docker容器里,比如run命令加:
-v ./你的本地kibana.yml路径:/usr/share/kibana/config/kibana.yml
第二步:调整Traefik的Docker标签
把你之前的Kibana标签补全,完整配置应该是这样:
traefik.enable=true traefik.frontend.redirect.entryPoint=https # Elasticsearch的配置保持不变 traefik.elasticsearch.frontend.rule=Host:elasticsearch.mydomain.com traefik.elasticsearch.port=9200 # Kibana的完整配置 traefik.kibana.frontend.rule=Host:kibana.mydomain.com traefik.kibana.port=5601 # 可选:如果想强制根路径跳转,加上这两行 traefik.kibana.frontend.redirect.regex=^https?://kibana.mydomain.com/?$ traefik.kibana.frontend.redirect.replacement=https://kibana.mydomain.com/app/kibana
之前的问题大概率是没给Kibana设置basePath,导致它收到根路径请求时,没法正确跳转。现在配置好之后,不管是访问kibana.mydomain.com还是直接访问kibana.mydomain.com/app/kibana,都能正常工作了。
要是还有问题,你可以看看Traefik的日志,排查下路由匹配有没有问题,一般都能很快找到原因。
内容的提问来源于stack exchange,提问作者Augie Luebbers
相关产品推荐
相关产品推荐

