Traefik 反向代理踩坑记
终于把反向代理从Nginx换成了Traefik。过程比预想的曲折,记录一下踩的几个坑。
第一个坑是Docker labels的缩进。Traefik通过Docker labels读取路由配置,但在docker-compose.yml里写labels的时候,缩进不对整个配置就失效,而且不会有任何明确的报错。排查了一下午才发现是traefik.http.routers下面的key对齐少了一个空格。
第二个坑更隐蔽:Let's Encrypt证书一直申请不下来,日志里反复报ACME验证失败。最后发现是阿里云安全组默认不放行80端口的ACME challenge请求。安全组里加了放行规则后秒过。
还有一个中间件顺序的问题:把rate-limit放在了compress前面,结果所有请求先被限速再压缩,压缩率惨不忍睹。调换顺序后恢复正常。Traefik的中间件是按声明顺序执行,不是按名称。
总的来说Traefik对Docker环境的适配确实比Nginx好,但学习曲线更陡。简单需求的话Nginx足够了。