主体部分
# traefik.toml
################################################################
# 全局配置文件
################################################################
# 设置超时的时间(以秒为单位)
# 在热更新期间给还在活动中的请求来完成当前任务的超时时间
#
# 可选
# 默认: 10
#
# graceTimeOut = 10
# 开启调试模式
#
# 可选
# 默认: false
#
# debug = true
# 定期检查是否有新版本产生
#
# 可选
# 默认: true
#
# checkNewVersion = false
# Traefik 日志文件
# 如果没有定义, 日志文件输出到 stdout
#
# 可选
#
# traefikLogsFile = "log/traefik.log"
# 日志文件路径
#
# 可选
#
# accessLogsFile = "log/access.log"
# 日志等级
#
# 可选
# 默认: "ERROR"
# 接受以下值,按照严重程度排序: "DEBUG", "INFO", "WARN", "ERROR", "FATAL", "PANIC"
# 日志等级在配置值或配置值以上的信息将被日志记录。
#
# logLevel = "ERROR"
# 后端节流持续时间:在应用新配置之前,提供者的2个事件之间的最短持续时间(以秒为单位)
# 如果在短时间内发送多个事件,它可以避免不必要的重新加载。
#
# 可选
# 默认: "2"
#
# ProvidersThrottleDuration = "5"
# 为每个host控制最大空闲连接(keep-alive)。如果设置为0,那么将会使用
# Go语言基础库net/http中的DefaultMaxIdleConnsPerHost。
# 如果造成 'too many open files' 错误,你也可以增加这个值或改变 `ulimit`。
#
# 可选
# 默认: 200
#
# MaxIdleConnsPerHost = 200
# 如果设置为 true, 无效的 SSL 证书也会被后端所接受。If set to true invalid SSL certificates are accepted for backends.
# 注意:这会禁用中间人攻击(man-in-the-middle attacks)监测,所以只能被用在安全的后端网络中。
#
# 可选
# 默认: false
#
# InsecureSkipVerify = true
# 被前端所使用的入口点未指定任何入口点。
# 任何前端可以指定它自己的入口点。
#
# 可选
# 默认: ["http"]
#
# defaultEntryPoints = ["http", "https"]
约束
在一个以中央服务发现的微服务架构中,配置文件会将Træfɪk的发现范围约束到一小部分路由上。
Træfɪk 根据你在配置后端时为服务设置的属性/标签来过滤服务。
支持的后端类型:
- Docker
- Consul K/V
- BoltDB
- Zookeeper
- Etcd
Consul Catalog 支持的过滤方式:
tag
# 定义约束条件
#
# 可选
#
# 简单约束匹配的条件
# constraints = ["tag==api"]
#
# 简单约束不匹配的条件
# constraints = ["tag!=api"]
#
# 约束全局匹配条件
# constraints = ["tag==us-*"]
#
# 后端指定约束条件
# [consulCatalog]
# endpoint = 127.0.0.1:8500
# constraints = ["tag==api"]
#
# 多个约束条件
# - "tag==" 必需匹配至少一个标签
# - "tag!=" 必需不匹配任何标签
# constraints = ["tag!=us-*", "tag!=asia-*"]
# [consulCatalog]
# endpoint = 127.0.0.1:8500
# constraints = ["tag==api", "tag!=v*-beta"]
入口点定义
# 入口点定义
#
# 可选
# 默认:
# [entryPoints]
# [entryPoints.http]
# address = ":80"
#
# 将一个http入口点转发到一个https入口点上(保留 SNI 支持):
# [entryPoints]
# [entryPoints.http]
# address = ":80"
# [entryPoints.http.redirect]
# entryPoint = "https"
# [entryPoints.https]
# address = ":443"
# [entryPoints.https.tls]
# [[entryPoints.https.tls.certificates]]
# CertFile = "integration/fixtures/https/snitest.com.cert"
# KeyFile = "integration/fixtures/https/snitest.com.key"
# [[entryPoints.https.tls.certificates]]
# CertFile = "integration/fixtures/https/snitest.org.cert"
# KeyFile = "integration/fixtures/https/snitest.org.key"
#
# 将一个入口点转发重写为URL:
# [entryPoints]
# [entryPoints.http]
# address = ":80"
# [entryPoints.http.redirect]
# regex = "^http://localhost/(.*)"
# replacement = "http://mydomain/$1"
#
# 只接受提供了被指定证书认证机构(CA)签发的证书的客户端。
# ClientCAFiles 可以在同一个文件被配置为多个CA证书或使用一个或多个文件配置多个CA证书。
# CA证书必需是PEM文件格式的。
# 所有客户端将被要求提供一个有效的证书。
# 这个队客户端的要求会被应用到该入口点下的所有服务器证书
# 在下面的例子中 snitest.com 与 snitest.org 都需要提供客户端证书
#
# [entryPoints]
# [entryPoints.https]
# address = ":443"
# [entryPoints.https.tls]
# ClientCAFiles = ["tests/clientca1.crt", "tests/clientca2.crt"]
# [[entryPoints.https.tls.certificates]]
# CertFile = "integration/fixtures/https/snitest.com.cert"
# KeyFile = "integration/fixtures/https/snitest.com.key"
# [[entryPoints.https.tls.certificates]]
# CertFile = "integration/fixtures/https/snitest.org.cert"
# KeyFile = "integration/fixtures/https/snitest.org.key"
#
# 要为一个入口点开启基础认证(basic auth)
# 使用2组用户名/密码: test:test 与 test2:test2
# 密码可以以MD5、SHA1或BCrypt方式加密:你可以使用htpasswd来生成这些用户名密码。
# [entryPoints]
# [entryPoints.http]
# address = ":80"
# [entryPoints.http.auth.basic]
# users = ["test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/", "test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0"]
#
# 要为一个入口点开启摘要认证(digest auth)
# 使用2组用户名/域/密码: test:traefik:test 与 test2:traefik:test2
# 你可以使用htdigest来生成这些用户名/域/密码
# [entryPoints]
# [entryPoints.http]
# address = ":80"
# [entryPoints.http.auth.basic]
# users = ["test:traefik:a2688e031edb4be6a3797f3882655c05 ", "test2:traefik:518845800f9e2bfb1f1f740ec24f074e"]
#
# 要指定一个https入口点使用一个较低的TLS版本并且指定一组密钥(在crypto/tls包中定义):
# [entryPoints]
# [entryPoints.https]
# address = ":443"
# [entryPoints.https.tls]
# MinVersion = "VersionTLS12"
# CipherSuites = ["TLS_RSA_WITH_AES_256_GCM_SHA384"]
# [[entryPoints.https.tls.certificates]]
# CertFile = "integration/fixtures/https/snitest.com.cert"
# KeyFile = "integration/fixtures/https/snitest.com.key"
# [[entryPoints.https.tls.certificates]]
# CertFile = "integration/fixtures/https/snitest.org.cert"
# KeyFile = "integration/fixtures/https/snitest.org.key"
# 要启用gzip格式压缩支持:
# [entryPoints]
# [entryPoints.http]
# address = ":80"
# compress = true
[entryPoints]
[entryPoints.http]
address = ":80"
重试配置
# 当网络故障时启用重发请求
#
# 可选
#
[retry]
# 重试次数
#
# 可选
# 默认: (后端服务器数量) -1
#
# attempts = 3
ACME (Let's Encrypt) 配置
# 使用ACME的入口点配置样本
[entryPoints]
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
# 启用 ACME (Let's Encrypt): 自动 SSL
#
# 可选
#
[acme]
# 用于注册的邮箱地址
#
# 必需
#
email = "[email protected]"
# 证书存储使用的文件或键。
# 警告,如果你在Docker中使用Traefik你有两种选择:
# - 在你的服务器上创建一个文件并作为一个卷挂载
# storageFile = "acme.json"
# $ docker run -v "/my/host/acme.json:acme.json" traefik
# - 将包含这个文件的目录作为一个卷挂载
# storageFile = "/etc/traefik/acme/acme.json"
# $ docker run -v "/my/host/acme:/etc/traefik/acme" traefik
#
# 必需
#
storage = "acme.json" # or "traefik/acme/account" if using KV store
# 代理acme验证证书challenge/apply的入口点。
# 警告, 必需指向到一个443端口作为入口点
#
# 必需
#
entryPoint = "https"
# 使用一个基于DNS的acme challenge而不是使用额外的HTTPS接入,例如,一个带有前置防火墙的服务器的情况可能无法完成验证
# 选择一个可以设置 challenge TXT 匹配记录的DNS域名的提供者,
# 并提供以下环境变量来启用它:
# - cloudflare: CLOUDFLARE_EMAIL, CLOUDFLARE_API_KEY
# - digitalocean: DO_AUTH_TOKEN
# - dnsimple: DNSIMPLE_EMAIL, DNSIMPLE_API_KEY
# - dnsmadeeasy: DNSMADEEASY_API_KEY, DNSMADEEASY_API_SECRET
# - exoscale: EXOSCALE_API_KEY, EXOSCALE_API_SECRET
# - gandi: GANDI_API_KEY
# - linode: LINODE_API_KEY
# - manual: 无,但是需要以可交互模式运行traefik & 打开acmeLogging来查看说明 & 按下回车
# - namecheap: NAMECHEAP_API_USER, NAMECHEAP_API_KEY
# - rfc2136: RFC2136_TSIG_KEY, RFC2136_TSIG_SECRET, RFC2136_TSIG_ALGORITHM, RFC2136_NAMESERVER
# - route53: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION, or configured user/instance IAM profile
# - dyn: DYN_CUSTOMER_NAME, DYN_USER_NAME, DYN_PASSWORD
# - vultr: VULTR_API_KEY
# - ovh: OVH_ENDPOINT, OVH_APPLICATION_KEY, OVH_APPLICATION_SECRET, OVH_CONSUMER_KEY
# - pdns: PDNS_API_KEY, PDNS_API_URL
#
# 可选
#
# dnsProvider = "digitalocean"
# 默认情况下,DNS提供者会在ACME验证前验证TXT DNS challenge
# 如果 delayDontCheckDNS 是一个比0大的值,跳过这里 & 否则配置这里就是等待多长时间(以秒为单位)
# 当内网屏蔽了附加的DNS查询时非常有用
#
# Optional
#
# delayDontCheckDNS = 0
# 如果设置为true,将显示由acme客户端代码库中产生的调试日志信息
#
# 可选
#
# acmeLogging = true
# 启用按需证书。如果这个主机名还没有证书,这将会在与一个主机名发起请求的第一个TLS握手中向Let's Encrypt请求一个证书。
# 警告,第一次在请求中获取主机证书会导致TLS握手会非常慢,这会引起Dos攻击。
# 警告,值得注意的是Let's Encrypt是有请求上限的:https://letsencrypt.org/docs/rate-limits
#
# 可选
#
# onDemand = true
# 启用根据前端Host规则来生成证书。这将会为每个具有Host规则的前端生成一个Let's Encrypt的证书。
# 举个例子,一个具有规则的Host:test1.traefik.cn,test2.traefik.cn 将会为主域名test1.traefik.cn与SAN(替代域名) test2.traefik.cn生成一个证书。
#
# 可选
#
# OnHostRule = true
# 所使用的CA服务器
# 取消注释这行来使其运行在正式环境的Let's Encrypt证书服务器上
# 在生产环境中请取消注释
#
# 可选
#
# caServer = "https://acme-staging.api.letsencrypt.org/directory"
# 域名列表
# 你可以为每个主域名提供多个SANs(替代域名)
# 所有域名的A/AAAA记录必需指向 Traefik
# 警告,值得注意的是Let's Encrypt是有请求上限的:https://letsencrypt.org/docs/rate-limits
# 每个域名 & SANs(替代域名)都将会指向一个证书请求。
#
# [[acme.domains]]
# main = "local1.com"
# sans = ["test1.local1.com", "test2.local1.com"]
# [[acme.domains]]
# main = "local2.com"
# sans = ["test1.local2.com", "test2x.local2.com"]
# [[acme.domains]]
# main = "local3.com"
# [[acme.domains]]
# main = "local4.com"
[[acme.domains]]
main = "local1.com"
sans = ["test1.local1.com", "test2.local1.com"]
[[acme.domains]]
main = "local3.com"
[[acme.domains]]
main = "local4.com"