Traefik代理PiHole时addPrefix无法自动添加/admin前缀
配置错误说明
你的Traefik规则不生效是三个明确问题导致的:
- 中间件绑定逻辑错误:Traefik同一路由的多个中间件必须用逗号分隔写在单条label配置中,你分两条写
traefik.http.routers.pihole.middlewares,后写入的HTTPS跳转配置会直接覆盖前面的前缀中间件配置,前缀规则从一开始就没被HTTP路由加载。 - HTTPS路由缺失前缀规则:你仅给HTTP入口的路由配置了前缀中间件,实际承载流量的HTTPS入口
pihole-secure路由没有绑定任何路径处理规则,HTTPS访问根路径时不会做任何路径调整。 - 中间件选型错误:
addPrefix仅在Traefik向后端服务转发请求时隐式追加路径,不会给客户端返回跳转响应,用户浏览器地址栏不会出现/admin后缀,同时Pi-hole的前端静态资源路径是硬编码基于/admin的,仅用addPrefix会导致静态资源全部404,必须用正则重定向实现客户端侧的路径跳转。
修正后的可用配置
替换原配置中的labels段即可,其余配置保持不变:
labels: - "traefik.enable=true" # HTTP入口路由配置 - "traefik.http.routers.pihole.entrypoints=http" - "traefik.http.routers.pihole.rule=Host(`pihole.local.myurl.com`)" # 多中间件按执行顺序逗号分隔,先做根路径跳转再强制跳HTTPS - "traefik.http.routers.pihole.middlewares=pihole-root-redirect,pihole-https-redirect" # HTTPS跳转中间件 - "traefik.http.middlewares.pihole-https-redirect.redirectscheme.scheme=https" # 根路径正则重定向:访问根域名时自动跳转到/admin路径 - "traefik.http.middlewares.pihole-root-redirect.redirectregex.regex=^https?://pihole\\.local\\.myurl\\.com/?$" - "traefik.http.middlewares.pihole-root-redirect.redirectregex.replacement=https://pihole.local.myurl.com/admin" # 调试阶段用302临时跳转,确认无问题可将permanent改为true启用301永久跳转 - "traefik.http.middlewares.pihole-root-redirect.redirectregex.permanent=false" # HTTPS安全路由配置 - "traefik.http.routers.pihole-secure.entrypoints=https" - "traefik.http.routers.pihole-secure.rule=Host(`pihole.local.myurl.com`)" - "traefik.http.routers.pihole-secure.tls=true" - "traefik.http.routers.pihole-secure.service=pihole" # 指定Pi-hole容器的Web服务端口 - "traefik.http.services.pihole.loadbalancer.server.port=80" - "traefik.docker.network=proxy"
额外注意事项
- 你当前配置中注释掉Pi-hole的80端口映射是正确的,走Traefik代理时不需要将容器Web端口直接暴露到宿主机,避免端口冲突。
- 配置更新后执行
docker-compose up -d重启容器,等待10秒左右Traefik加载完新规则即可生效。
内容的提问来源于stack exchange,提问作者lkrimphove
相关产品推荐
相关产品推荐

