Traefik v3 - Docker compose - Redirect to new URL Without Service Backend

My traefik docker-compose.yml:

services:

  traefik:
    image: "traefik:v3.5"
    restart: always
    labels:
      - traefik.enable=true
      
      - traefik.http.routers.proxy-comics.rule=Host(`comics.cristo.dev.br`) || Host(`comics`)
      - traefik.http.routers.proxy-comics.entrypoints=websecure
      - traefik.http.routers.proxy-comics.tls=true
      - traefik.http.routers.proxy-comics.service=proxy-comics
      - traefik.http.services.proxy-comics.loadbalancer.server.url=http://192.168.2.200:9999

            
      - traefik.http.routers.proxy-uptime.rule=Host(`uptime.cristo.dev.br`)
      - traefik.http.routers.proxy-uptime.entrypoints=websecure
      - traefik.http.middlewares.proxy-uptime.redirectscheme.scheme=https
      - traefik.http.middlewares.proxy-uptime.redirectscheme.permanent=true
      - traefik.http.routers.proxy-uptime.tls=true
      - traefik.http.routers.proxy-uptime.service=proxy-uptime
      - traefik.http.services.proxy-uptime.loadbalancer.server.url=http://192.168.2.200:3001

      - traefik.http.routers.proxy-traefik.rule=Host(`traefik.cristo.dev.br`) || Host(`traefik`)
      - traefik.http.routers.proxy-traefik.entrypoints=websecure
      - traefik.http.routers.proxy-traefik.tls=true
      - traefik.http.routers.proxy-traefik.service=proxy-traefik
      - traefik.http.services.proxy-traefik.loadbalancer.server.url=http://192.168.2.200:8080

      - traefik.http.routers.proxy-portainer.rule=Host(`portainer.cristo.dev.br`) || Host(`portainer`)
      - traefik.http.routers.proxy-portainer.entrypoints=websecure
      - traefik.http.routers.proxy-portainer.tls=true
      - traefik.http.routers.proxy-portainer.service=proxy-portainer
      - traefik.http.services.proxy-portainer.loadbalancer.server.url=https://192.168.2.200:9443

      - traefik.http.routers.proxy-jellyfin.rule=Host(`jellyfin.cristo.dev.br`) || Host(`jellyfin`)
      - traefik.http.routers.proxy-jellyfin.entrypoints=websecure
      - traefik.http.routers.proxy-jellyfin.tls=true
      - traefik.http.routers.proxy-jellyfin.service=proxy-jellyfin-svc
      - traefik.http.services.proxy-jellyfin-svc.loadbalancer.server.url=http://192.168.2.200:8096
      
    command:
      #- "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entryPoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      #- "--entrypoints.udp-7359.address=:7359/udp"
      - "--serverstransport.insecureskipverify=true"
      - "--providers.file.directory=/etc/traefik/dynamic"
    ports:
      - 80:80
      - 443:443
      - 8080:8080
      #- 7359:7359/udp
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - traefik-certs-config:/etc/traefik/dynamic
      - traefik-certs:/etc/certs/

volumes:
  traefik-certs-config:
    external: true
  traefik-certs:
    external: true

I am using it with no service backends. All services are elsewhere away from traefik.
The config above is working fine.

What I want and did not find the answer anywhere:

Tried with label middleware but I think it must be positioned on the backend service. I do not have backend service, just one container with traefik.

Please help

You could create a new router with redirect middleware, something like:

      - traefik.http.routers.uptime-redir.entrypoints=web
      - traefik.http.routers.uptime-redir.rule=Host(`uptime`)
      - traefik.http.routers.uptime-redir.middlewares=uptime-redir
      - traefik.http.routers.uptime-redir.service=uptime-redir
      - traefik.http.middlewares.uptime-redir.redirectregex.regex=^http://uptime/(.*)
      - traefik.http.middlewares.uptime-redir.redirectregex.replacement=https://uptime.cristo.dev.br/$${1}
      - traefik.http.services.uptime-redir.service=noop@internal
2 Likes

Thanks for the help.

But when I applied your suggestion and rebooted docker-compose it shows me this error on log:

2025-10-12T02:32:44Z ERR error="field not found, node: service" container=traefik-traefik-f06da4cb4a0e9cee3ca2593bf41b6d3918002880b9ed95081eb87f22fe58723f providerName=docker

Found the problem.

- traefik.http.services.uptime-redir.service=noop@internal

changed to:

- traefik.http.routes.uptime-redir.service=noop@internal

Complete block:

      - traefik.http.routers.uptime-redir.entrypoints=web
      - traefik.http.routers.uptime-redir.rule=Host(`uptime`)
      - traefik.http.routers.uptime-redir.middlewares=uptime-redir
      - traefik.http.routers.uptime-redir.service=uptime-redir
      - traefik.http.middlewares.uptime-redir.redirectregex.regex=^http://uptime/(.*)
      - traefik.http.middlewares.uptime-redir.redirectregex.replacement=https://uptime.cristo.dev.br/$${1}
      - traefik.http.routers.uptime-redir.service=noop@internal

Thanks @bluepuma77 you directed me to the solution

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.