Traefik v3 配置参数详解
Traefik v3.7.14 配置参数详解:静态配置与动态配置两级体系、entryPoints/api/log/accesslog/ping/metrics/providers/certificatesresolvers(ACME) 各段参数说明与真实默认值、生产配置模板,全部对照真实环境配置文件与 --help 输出
Traefik v3 配置参数详解
目标:详解 Traefik v3.7.14 的配置体系与常用参数。Traefik 采用「静态配置 + 动态配置」两级体系,本文档给出各配置段参数说明、真实默认值与生产配置模板,全部对照 Ubuntu 22.04 真实环境配置文件与
traefik --help实测输出。
环境信息
- 操作系统:Ubuntu 22.04.5 LTS(x86_64)
- Traefik 版本:
v3.7.14(Codenamelangres) - 静态配置文件:
/etc/traefik/traefik.yml - 动态配置目录:
/etc/traefik/dynamic - 管理端口:
:8080(API / Dashboard),入口:80(web)、:443(websecure) - 参考来源:
traefik --help完整输出(/tmp/traefik-exp/fullhelp.txt 实测)
前置条件
- 已按《Ubuntu 22.04 安装 Traefik 指南》完成安装
- 掌握 Traefik 两级配置概念:静态配置(启动加载)与动态配置(routing,provider 发现)
参数查看与修改方式
-
查看全部静态配置 flag 与默认值:
traefik --help # 或对某子段精细查看 traefik --help | grep -A3 "--providers.redis.endpoints" -
查看当前运行状态(动态配置):
curl http://127.0.0.1:8080/api/rawdata curl http://127.0.0.1:8080/api/overview curl http://127.0.0.1:8080/api/version -
查看静态配置加载日志(DEBUG 级别):
Static configuration loaded [json] staticConfiguration={"api":{...},"entryPoints":{...},"log":{...},"providers":{...}} -
修改方式:编辑静态配置
/etc/traefik/traefik.yml后重启 Traefik(系统重启或systemctl restart traefik);修改动态配置/etc/traefik/dynamic/后自动热加载(需providers.file.watch: true)。
参数总览
Traefik 配置分两级:
| 级别 | 文件/来源 | 作用 | 加载时机 |
|---|---|---|---|
| 静态配置 | /etc/traefik/traefik.yml | entryPoints、api、providers、log、metrics、certificatesresolvers | 启动时一次性加载 |
| 动态配置 | /etc/traefik/dynamic/*.yml 或 KV provider | routers、services、middlewares | 启动后持续热加载 |
静态配置核心段:
| 段 | 作用 |
|---|---|
entryPoints | 定义流量入口(web:80 / websecure:443 / traefik:8080) |
providers | 动态配置来源(file / docker / redis / consul / etcd ...) |
api | Dashboard / API 服务开关 |
log / accesslog | 运行日志 / 访问日志 |
ping | 健康检查端点 |
metrics | 指标采集(Prometheus 等) |
certificatesresolvers | ACME/Let's Encrypt 证书签发 |
global | 全局能力(版本检查、匿名使用统计等) |
一、entryPoints(流量入口)
每类入口决定 Traefik 监听哪些端口、走 HTTP/TCP/UDP。
entryPoints:
web:
address: ":80"
http:
redirections:
entrypoint:
to: websecure
scheme: https
permanent: true
websecure:
address: ":443"
traefik:
address: ":8080"
| 参数 | 真实默认值 | 说明 |
|---|---|---|
entryPoints.<name>.address | 空 | 监听地址,:80 表示全接口 80 端口 |
entryPoints.<name>.http2.maxconcurrentstreams | 250 | HTTP/2 最大并发流 |
entryPoints.<name>.http.redirections.entrypoint.permanent | true | HTTP→HTTPS 重定向是否永久 |
entryPoints.<name>.http.redirections.entrypoint.scheme | https | 重定向协议 |
entryPoints.<name>.http.encodedcharacters.* | true | 是否允许 URL 中的编码字符 |
entryPoints.<name>.transport.respondingtimeouts.idletimeout | 180 | 空闲超时(秒) |
entryPoints.<name>.transport.respondingtimeouts.readtimeout | 60 | 读超时(秒) |
entryPoints.<name>.transport.respondingtimeouts.writetimeout | 0 | 写超时(0 表示不超时) |
entryPoints.<name>.transport.lifecycle.gracetimeout | 10 | 优雅停机宽限(秒) |
entryPoints.<name>.forwardedheaders.insecure | false | 信任所有代理的 X-Forwarded-* 头 |
entryPoints.<name>.proxyprotocol.insecure | false | 是否信任所有 Proxy Protocol 源 |
entryPoints.<name>.http3 | false | 是否启用 HTTP/3 (QUIC) |
💡 说明:named entryPoint 常用
web(80)、websecure(443)、traefik(8080)。traefik这个内置名默认承载 API 与 ping。
二、providers(动态配置来源)
Provider 是 Traefik 发现路由/服务的来源。以下为常见 file 与 KV 类 provider 的真实默认值(traefik --help 实测)。
2.1 file provider
providers:
file:
directory: /etc/traefik/dynamic
watch: true
# 或 filename: /etc/traefik/dynamic.yml(单文件模式,与 directory 二选一)
| 参数 | 真实默认值 | 说明 |
|---|---|---|
providers.file.directory | 空 | 动态配置目录 |
providers.file.filename | 空 | 单动态配置文件(与 directory 互斥) |
providers.file.watch | true | 监听目录热加载 |
2.2 redis / consul / etcd KV provider(集群共享配置)
| 参数 | 真实默认值 | 说明 |
|---|---|---|
providers.redis.endpoints | 127.0.0.1:6379 | Redis 地址列表 |
providers.redis.rootkey | traefik | 配置前缀 key |
providers.redis.db | 0 | Redis 逻辑库号 |
providers.consul.endpoints | 127.0.0.1:8500 | Consul 地址 |
providers.consul.rootkey | traefik | Consul 配置前缀 |
providers.etcd.endpoints | 127.0.0.1:2379 | etcd 地址 |
providers.etcd.rootkey | traefik | etcd 配置前缀 |
💡 说明:KV provider 让多个 Traefik 实例共享同一份动态配置(详见《Traefik v3 Docker Compose 部署指南》集群模式)。多实例共享 Redis/Consul/etcd 即实现路由配置一致与互备。
2.3 docker provider
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
| 参数 | 真实默认值 | 说明 |
|---|---|---|
providers.docker | false | 是否启用 docker provider |
providers.docker.endpoint | unix:///var/run/docker.sock | Docker socket 端点 |
providers.docker.exposedByDefault | true | 是否默认暴露所有容器 |
三、api 与 Dashboard
api:
dashboard: true
insecure: true
debug: false
basepath: "/"
| 参数 | 真实默认值 | 说明 |
|---|---|---|
api | false | 是否启用 API/Dashboard |
api.insecure | false | 是否在 traefik 入口(:8080)直接暴露 API,无需 TLS |
api.dashboard | true | 是否激活 Dashboard |
api.debug | false | 是否开启 Debug(含 /api/rawdata 更多字段) |
api.basepath | / | API 与 Dashboard 的基础路径 |
💡 说明:
api.insecure: true仅建议内网/调试使用;生产建议关闭 insecure 或以带 TLS 的独立域名暴露 Dashboard。
四、log 与 accesslog
4.1 运行日志 log
log:
level: INFO
filePath: ""
# format: json
| 参数 | 真实默认值 | 说明 |
|---|---|---|
log.level | ERROR | 日志级别(INFO/DEBUG/WARN/ERROR) |
log.filepath | 空 | 日志文件路径,空则输出 stdout |
log.format | common | 日志格式(json / common) |
log.maxage / log.maxbackups / log.maxsize | 0 | 日志轮转(天/份/MB) |
log.compress | false | 是否压缩轮转日志 |
log.nocolor | false | 是否关闭颜色输出 |
4.2 访问日志 accesslog
accesslog:
filepath: ""
format: common
# 可按需过滤
filters:
statuscodes: "200-299"
| 参数 | 真实默认值 | 说明 |
|---|---|---|
accesslog | false | 是否启用访问日志 |
accesslog.filepath | 空 | 访问日志路径,空则 stdout |
accesslog.format | common | 格式(common / json / genericCLF) |
accesslog.bufferingsize | 0 | 缓冲行数(0 不缓冲) |
accesslog.filters.statuscodes | 空 | 仅记录指定状态码区间 |
accesslog.filters.retryattempts | false | 仅记录有重试的请求 |
accesslog.addinternals | false | 是否记录内部服务(ping/dashboard)访问 |
五、ping(健康检查)
ping: true
| 参数 | 真实默认值 | 说明 |
|---|---|---|
ping | false | 是否开启 ping 端点 |
ping.entrypoint | traefik | ping 端点所在入口(默认 traefik,即 :8080) |
💡 说明:开启后
GET /ping返回200 OK,供负载均衡/编排系统探活;也可用traefik healthcheck子命令调用。
六、metrics(指标采集)
metrics:
prometheus:
addEntryPointsLabels: true
addServicesLabels: true
| 参数 | 真实默认值 | 说明 |
|---|---|---|
metrics.prometheus | false | 是否启用 Prometheus 指标 |
metrics.prometheus.entrypoint | traefik | 指标暴露入口 |
metrics.prometheus.addEntryPointsLabels | true | 是否带 entryPoint 标签 |
metrics.prometheus.addRoutersLabels | false | 是否带 router 标签 |
metrics.prometheus.addServicesLabels | true | 是否带 service 标签 |
metrics.prometheus.manualrouting | false | 是否由路由手动暴露 /metrics |
💡 说明:开启后
GET /metrics输出traefik_entrypoint_requests_total、traefik_service_requests_total、traefik_config_reloads_total、traefik_build_info、traefik_open_connections等指标,可直接被 Prometheus 抓取。
七、certificatesresolvers(ACME 证书)
certificatesResolvers:
letsencrypt:
acme:
email: admin@example.com
storage: /etc/traefik/acme.json
caserver: https://acme-staging-v02.api.letsencrypt.org/directory
tlschallenge: true
# 或 httpchallenge:
# entryPoint: web
| 参数 | 真实默认值 | 说明 |
|---|---|---|
certificatesResolvers.<name>.acme.email | 空 | ACME 注册邮箱 |
certificatesResolvers.<name>.acme.storage | acme.json | 证书存储文件 |
certificatesResolvers.<name>.acme.caserver | https://acme-v02.api.letsencrypt.org/directory | ACME CA 服务地址 |
certificatesResolvers.<name>.acme.keytype | RSA4096 | 证书密钥类型 |
certificatesResolvers.<name>.acme.certificatesduration | 2160 | 证书时长(小时) |
certificatesResolvers.<name>.acme.tlschallenge | false | 是否启用 TLS-ALPN-01 挑战 |
certificatesResolvers.<name>.acme.httpchallenge | false | 是否启用 HTTP-01 挑战 |
certificatesResolvers.<name>.acme.dnschallenge | false | 是否启用 DNS-01 挑战 |
💡 说明:
caserver默认是正式环境;实验/联调时改acme-staging-v02避免证书限额。无公网域名时 ACME 无法真正签发(日志显示The ACME resolve is skipped);按真实服务器配置公网域名 + 80/443 放通后即可自动签发。
八、global(全局能力)
| 参数 | 真实默认值 | 说明 |
|---|---|---|
global.checknewversion | true | 是否检查新版本 |
global.sendanonymoususage | 弱提示 | 是否发送匿名使用统计 |
global.notappendxforwardedfor | false | 是否禁止追加 X-Forwarded-For |
生产配置模板
适用场景:16GB 内存、公网域名、反向代理 + 自动 HTTPS + 指标采集 + 集群共享配置。
entryPoints:
web:
address: ":80"
http:
redirections:
entrypoint:
to: websecure
scheme: https
permanent: true
websecure:
address: ":443"
api:
dashboard: true
insecure: false # 生产关闭 insecure,以证书保护
providers:
file:
directory: /etc/traefik/dynamic
watch: true
log:
level: INFO
filePath: /var/log/traefik/traefik.log
format: json
accesslog:
filepath: /var/log/traefik/access.log
ping: true
metrics:
prometheus:
addEntryPointsLabels: true
addServicesLabels: true
certificatesResolvers:
letsencrypt:
acme:
email: admin@example.com
storage: /etc/traefik/acme.json
tlschallenge: true
💡 说明:本模板面向「16GB 内存、SSD 磁盘、对外公网网关」场景:web 强制跳 HTTPS、Dashboard 关闭 insecure、日志落盘并走 json、开启 ping 探活与 Prometheus 指标、配 Let's Encrypt 自动证书。若为多实例高可用,将
providers.file更换为共享providers.redis/consul/etcd即可(见部署篇集群模式)。
常见问题
Q1:API/Dashboard 无法访问
A:确认 api.insecure: true 且监听 :8080(api.basepath 默认 /)。生产关闭 insecure 后访问带 TLS 的域名需要额外路由。
Q2:动态配置不生效
A:确认 providers.file.watch: true 且文件放入 directory 指向目录;配 YAML 后可用 curl /api/rawdata 核对 routers/services 是否出现。
Q3:metrics 拿不到数据
A:确认 metrics.prometheus: true 且 GET /metrics 从 traefik 入口访问;addRoutersLabels 默认 false,需要时显式开启。
Q4:ACME 签发失败
A:确认公网域名已解析且 80/443 放通;caserver 指向正式环境;可用 staging caserver 联调,成功后再切正式。
参考链接
- 静态配置参考:https://doc.traefik.io/traefik/reference/static-configuration/file/
- 路由与动态配置:https://doc.traefik.io/traefik/routing/overview/
- ACME 证书:https://doc.traefik.io/traefik/https/acme/
- CLI 帮助:
traefik --help(本机实测)