静态配置 traefik.yml
# 流量入口
entryPoints:
# 定义入口,任意起名
web:
# 监听端口
address: :80
forwardedHeaders:
insecure: true
# http:
# redirections:
# #转发到另一个入口
# entryPoint:
# to: websecure
# scheme: https
# 443入口,任意起名
websecure:
address: :443
forwardedHeaders:
insecure: true
# 动态配置
providers:
file:
filename: gateway/dynamic_conf.yml
# 工作日志
log:
filePath: gateway/traefik.log
# 访问日志
accessLog:
filePath: gateway/access.log
# 保留在内存中的日志行数
bufferingSize: 100
fields:
names:
# 设置本地时区,不然默认是0时区时间输出
StartLocal: keep
StartUTC: drop
api:
# false为启用安全访问
insecure: false
动态配置 dynamic_conf.yml
http:
routers:
#定义一个路由,任意起名
#项目前端
project-ui:
# 匹配规则,满足规则后会执行中间件,在调用服务
rule: "Host(`project.com`)"
service: project-ui
# 匹配权重,0是无权重,越大越优先匹配
# priority: 0
middlewares:
- breaker
- limit
- errorpage
# 项目后端
project-backend:
# PathPrefix 路径前缀 匹配 project.com/backend/*
rule: "Host(`project.com`) && PathPrefix(`/backend`)"
service: project-backend
middlewares:
- breaker
- limit
# 访问 /backend/*,实际请求转发的是 localhost:8082/*
- strip
- errorpage
# 服务中心
project-consul:
# PathPrefix 路径前缀 匹配 project.com/consul/*,实际请求转发的是 localhost:8500/consul/*
rule: "Host(`project.com`) && (PathPrefix(`/consul`)|| PathPrefix(`/v1`) )"
middlewares:
# 使用自定义的中间件
- auth
service: project-consul
# traefik 内置web仪表盘
dashboard:
rule: "Host(`project.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
# 内部api服务
service: api@internal
# 使用中间件,auth安全访问
middlewares:
- auth
middlewares:
# 定义一个中间件,任意起名
# 用户认证
auth:
# 使用官方的中间件
basicAuth:
usersFile: gateway/auth
# 断路器
breaker:
circuitBreaker:
# 网络错误率达到10%时,打开断路器
# 或者
# 25%的请求返回5XX状态(在返回状态代码从0到5XX的请求中),打开断路器
# 断路器打开后,服务就会不可用,过段时间会自动恢复
expression: NetworkErrorRatio() > 0.10 || ResponseCodeRatio(500, 600, 0, 600) > 0.25
# 限流
limit:
rateLimit:
# 每秒请求数
average: 10
# 跳过前缀路径
strip:
stripPrefix:
prefixes:
- /backend
# 错误页面
errorpage:
errors:
# 指定状态码
status:
- 500-599
- 404
service: project-ui
# 服务提供错误页面的网址
query: /{status}.html
services:
# 定义一个服务,任意起名
project-ui:
# 负载均衡,轮询策略
loadBalancer:
# 配置多个服务器
servers:
- url: http://localhost:8081
healthCheck:
path: /health
interval: 10s
timeout: 3s
# 项目后端服务
project-backend:
# 负载均衡,轮询策略
loadBalancer:
servers:
- url: http://localhost:8082
# 健康检查,每隔10s,检查一次,也就是去请求/health
healthCheck:
# 检查路径,自定义起名,自己服务器需支持此路径
# 返回状态代码2XX或3XX就认为是健康的,否则不健康会被移除
path: /health
# 检查调用的频率,每10秒调用一次
interval: 10s
# 超时时间设置
timeout: 3s
# 项目服务中心
project-consul:
# 负载均衡,轮询策略
loadBalancer:
servers:
- url: http://localhost:8500
healthCheck:
path: /v1/agent/checks
interval: 10s
timeout: 3s
gateway/auth认证文件,认证一次,所有子系统通用,退出浏览器失效
ps: 密码必须使用MD5,SHA1或BCrypt进行哈希处理,可以使用htpasswd
生成的密码。
test:$apr1$yjHwJ6kr$szcYpC.dwpayQYlZu4N5d1
启动命令 --configFile 值为相对工作目录的配置文件位置
traefik --configFile=gateway/traefik.yml