跳到正文
Træfɪk

文件

文件提供者允许你在 YAML 或 TOML 文件中定义安装配置。

它支持通过单个配置文件或多个独立文件提供配置。

提示

在整套文档中,文件提供者是展示众多功能配置示例时使用的默认格式。

提示

文件提供者很适合复用其他提供者中的通用元素,例如声明允许列表中间件、基本身份验证等。

配置示例

可以按以下方式启用文件提供者:

providers:
  file:
    directory: "/path/to/dynamic/conf"
[providers.file]
  directory = "/path/to/dynamic/conf"
--providers.file.directory=/path/to/dynamic/conf

声明路由器、中间件和服务:

http:
  # Add the router
  routers:
    router0:
      entryPoints:
      - web
      middlewares:
      - my-basic-auth
      service: service-foo
      rule: Path(`/foo`)

  # Add the middleware
  middlewares:
    my-basic-auth:
      basicAuth:
        users:
        - test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/
        - test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0
        usersFile: etc/traefik/.htpasswd

  # Add the service
  services:
    service-foo:
      loadBalancer:
        servers:
        - url: http://foo/
        - url: http://bar/
        passHostHeader: false
[http]
  # Add the router
  [http.routers]
    [http.routers.router0]
      entryPoints = ["web"]
      middlewares = ["my-basic-auth"]
      service = "service-foo"
      rule = "Path(`/foo`)"

  # Add the middleware
  [http.middlewares]
    [http.middlewares.my-basic-auth.basicAuth]
      users = ["test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/",
                "test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0"]
      usersFile = "etc/traefik/.htpasswd"

  # Add the service
  [http.services]
    [http.services.service-foo]
      [http.services.service-foo.loadBalancer]
        [[http.services.service-foo.loadBalancer.servers]]
          url = "http://foo/"
        [[http.services.service-foo.loadBalancer.servers]]
          url = "http://bar/"

配置选项

字段 说明 默认值 必填
providers.providersThrottleDuration 配置重新加载后,在接受新的配置刷新事件之前至少等待的时间。
如果在此期间发生多个事件,只处理最新的事件,其余事件全部丢弃。
此选项无法为每个提供者单独设置,但节流算法会独立作用于各个提供者。
2s 否
providers.file.filename 定义配置文件的路径。 "" 是
providers.file.directory 定义包含配置文件的目录路径。filename 与 directory 选项互斥。建议使用 directory。 "" 是
providers.file.watch 将 watch 选项设置为 true,允许 Traefik 自动监听文件变更。此选项同时适用于 filename 和 directory。 true 否
providers.file.debugLogGeneratedTemplate 启用所生成配置模板的调试日志。 false 否

限制

使用文件提供者时,Traefik 会监听文件系统通知,以更新动态配置。

如果在编排器(例如 docker 或 kubernetes)中使用挂载或绑定的文件系统,文件的链接方式可能引发错误。 如果文件系统之间的链接断开,源文件或目录被修改或重命名时,关联的文件或目录不会收到任何通知,因此既不会触发,也无法捕获文件系统通知。

例如在 Docker 中,如果宿主机上的文件被重命名,到挂载文件的链接就会断开,容器中的文件也不再更新。 为避免此类问题,建议:

  • 将 Traefik 的 directory 配置设置为父目录
  • 挂载或绑定该父目录

由于监听所有文件系统通知非常困难,Traefik 使用 fsnotify。 如果使用挂载目录中的目录仍无法解决问题,请检查文件系统与 fsnotify 的兼容性。


在生产环境使用 Traefik OSS?

如果你在工作中使用 Traefik,可以考虑为 Traefik OSS 增加企业级 API 网关能力或商业支持。

为 Traefik OSS 增加 API 网关能力快捷且平滑,无需推倒重来,现有配置也会完整保留。请通过这个简短视频了解实际效果。


版权所有 © 头文件软件工作室

文档由 HeadFile Studio 翻译。

Traefik v3.7 中文快照 · 原文版权归 Traefik Labs 及贡献者所有 · MIT 许可证