Traefik 3配置异常:路由规则看似正确但请求返回404
兄弟我太懂这种“明明日志和面板都显示路由、服务都建好了,但就是给我返回404”的崩溃感!从Traefik2切到3,很多默认行为和细节都变了,尤其是你想简化标签配置的情况下,很容易踩一些不起眼的坑。结合你部署Authelia的场景,给你捋几个最可能的排查方向:
EntryPoints默认行为改了!
Traefik3不再默认启用web和websecure这两个大家用惯的入口点了!如果你还是像Traefik2那样,没在静态配置(比如traefik.yml)里显式定义这两个EntryPoints,那你的路由就算创建了,也没绑定到实际监听的端口上,请求自然打不进来。赶紧检查你的静态配置,是不是少了这段:entryPoints: web: address: ":80" websecure: address: ":443"同时还要确保Authelia的路由明确指定了
entryPoints: websecure(或者你自定义的HTTPS入口),不然路由就是个“空架子”。服务端口别让Traefik猜
Traefik3对Docker服务的端口发现逻辑更严格了,不像2那样能自动识别容器暴露的端口。如果你用File Provider配置,要在服务定义里明确写死目标地址和端口:services: authelia: loadBalancer: servers: - url: "http://authelia:9091"要是用Docker Compose的Labels(哪怕你想简化,这一步暂时不能省),必须加
traefik.http.services.authelia.loadbalancer.server.port=9091,不然Traefik根本不知道该把请求转发到哪个端口。TLS配置要跟路由绑定死
如果你是用HTTPS访问子域名,那路由必须明确关联TLS配置。比如你在静态配置里定义了Let's Encrypt的证书解析器,那路由里要加上:routers: authelia: rule: "Host(`auth.yourdomain.com`)" entryPoints: - websecure service: authelia tls: certResolver: your_letsencrypt_resolver要是漏了
tls这块配置,Traefik会把你的HTTPS请求当成不匹配任何路由的请求,直接返回404。再抠一遍路由规则的细节
虽然你说路由创建成功,但还是要再核对下Host规则的域名是不是完全一致——有没有多打了个点?大小写是不是错了?Traefik3的规则匹配是严格区分的。另外,看看有没有其他路由的优先级比这个高,比如有个HostRegexp的路由先把请求截走了,但那个路由绑定的服务不存在,也会导致404。去Traefik面板的Routers页看看Authelia路由的priority值是不是比其他路由低。Docker网络别搞“异地恋”
最后排查下网络连通性:Traefik容器和Authelia容器是不是在同一个Docker网络里?比如你Authelia在自定义的proxy网络,但Traefik还在默认的bridge网络,那Traefik根本连不上Authelia服务,就算路由存在也白搭。用docker network inspect proxy就能看到两个容器是不是都在这个网络里。
给你个快速验证小技巧:进Traefik容器里用curl直接访问Authelia,比如docker exec -it 你的traefik容器名 curl http://authelia:9091,如果能返回Authelia的页面,那问题肯定在Traefik的路由/EntryPoint/TLS配置上;如果curl也失败,那就是Docker网络或者Authelia本身没启动好的问题。
备注:内容来源于stack exchange,提问作者luxifer

