拆分Docker栈后,Traefik中为Authelia配置trustedIPs的正确值是什么?
看起来你遇到的核心问题是:拆分栈之后,Traefik没有正确信任Authelia所在的Docker自定义网络IP,导致它把Authelia转发过来的请求里的身份验证相关头(比如X-Forwarded-User、X-Forwarded-Email)给移除了,Calibre-web识别不到你已经通过Authelia验证,所以才会反复要求登录。
解决步骤:
先找到你的
proxy自定义网络的IP子网
运行这条命令查看网络详情:docker network inspect proxy在输出里找到
IPAM->Config下的Subnet字段,比如类似这样的结果:"IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.22.0.0/16", "Gateway": "172.22.0.1" } ] }这里的
172.22.0.0/16就是你需要的信任IP段。在Traefik的配置中添加这个信任IP段
修改Traefik服务的command配置,加入--entrypoints.websecure.forwardedHeaders.trustedIPs参数,把刚才查到的子网填进去。比如修改后的command部分:command: - --api.insecure=true - --providers.docker - --entrypoints.web.address=:80 - --entrypoints.websecure.address=:443 - --certificatesresolvers.letsencrypt.acme.email=${LE_EMAIL} - --certificatesresolvers.letsencrypt.acme.storage=/config/acme.json - --certificatesresolvers.letsencrypt.acme.tlschallenge=true - --log.filePath=/var/log/traefik.log - --log.level=DEBUG - --providers.file.directory=/dynamic_config/ - --providers.file.watch=true # 添加这一行,替换成你查到的子网 - --entrypoints.websecure.forwardedHeaders.trustedIPs=172.22.0.0/16额外检查动态配置文件
如果你在dynamic_config目录里有自定义的中间件配置(比如涉及forwardedHeaders的规则),也要确保那里的trustedIPs包含这个子网,避免配置冲突。重启Traefik服务
重新部署Traefik栈,之后再访问Calibre-web应该就不会反复要求验证了。
为什么单栈时不需要这个配置?
单栈模式下,Traefik、Authelia和Calibre-web都在同一个默认Docker网络里,Traefik默认会信任同网络内的请求来源,所以不会移除关键的身份验证头。拆分栈后,虽然大家都连接到proxy自定义网络,但Traefik需要明确被告知要信任这个网络的IP段,才会保留这些头信息。
备注:内容来源于stack exchange,提问作者Auspex

