【问题标题】:Add non-docker service to traefik v2 - site resources missing向 traefik v2 添加非 docker 服务 - 缺少站点资源
【发布时间】:2020-01-27 12:54:35
【问题描述】:

以下问题更新!

我最近几天设置了 traefik,它似乎对 docker 容器非常有用。不起作用的是设置非 docker 后端。我在主机的 19999 端口上运行了一个 netdata 仪表板 (https://github.com/netdata/netdata)。

我已经定义了一个文件提供者:

[providers.file]
  directory = "/home/myname/traefik"
  filename = "providers.toml"
  watch = true

我在哪里为我的 netdata 仪表板定义了服务和路由器:

[http.routers]
  [http.routers.netdata]
    service = "netdata"
    middlewares = ["replacepath"]
    rule = "Host(`my.host.name`) && Path(`/netdata`)"

[http.middlewares]
  [http.middlewares.replacepath.replacePath]
    path = "/"

[http.services]
  [http.services.netdata]
      [http.services.netdata.loadBalancer]
        [[http.services.netdata.loadBalancer.servers]]
          url = "http://192.168.178.60:19999/" ---> my server local ip 

我使用 replacepath 去除路径,这样我就不会在更下方的一个目录中结束,该目录不存在。

但是,当我访问 http://my.host.name/netdata 时,它看起来只为我提供原始 html,我得到 .css 和 .js 内容的 404。

我必须做些什么才能使网站目录中的所有文件都交付?我觉得有一个简单的解决方案,我现在看不到......

我发现了几个使用旧 traefik 版本的教程,它们使用前端和后端,据我了解,这些正在被路由器、中间件和服务所取代。

  • 我尝试使用“http://localhost:19999”而不是我的本地 ip,但没有成功(导致网关错误)
  • 我还尝试将 traefik 容器设置为网络“主机”,因为容器应该与主机的其余部分隔离,因此 traefik 无法与 netdata 服务器通信,但正如我所说,我至少得到了网站的一部分,所以这不是问题吗?

更新 #1,20 年 1 月 30 日:

经过更多尝试和失败的尝试使其与 nginx 一起工作后,我意识到不是代理本身是这里的问题。我注意到我在根级别运行的任何服务(因此,不是 traefik 中的路径规则,或 nginx 中的location /)它可以工作,但其他所有获得路径/位置的服务都被破坏或根本不工作。我想通过路由代理的一项服务是来自我的 homebridge (https://github.com/nfarina/homebridge) 的仪表板——但 Angular 似乎在自定义路径方面遇到了麻烦。我的 netdata 仪表板或我的 onionbox 状态站点也存在同样的问题。我将这个问题悬而未决,也许有人找到了一种(hacky)让它工作的方法。

【问题讨论】:

    标签: linux docker traefik


    【解决方案1】:

    您必须在路由器上使用“PathPrefix”,在中间件上使用“replacePathRegex”。

    试试这个方法……它对我有用:

    [http]
      [http.services]
        [http.services.netdata]
          [http.services.netdata.loadBalancer]
            [[http.services.netdata.loadBalancer.servers]]
            url = "http://172.24.0.1:19999"
    
      [http.middlewares]
        [http.middlewares.rem_subfolder]
          [http.middlewares.rem_subfolder.replacePathRegex]
          regex = "/netdata/(.*)"
          replacement = "/$1"
    
      [http.routers]
        [http.routers.netdata]
        rule = "PathPrefix(`/netdata/`)"
        entrypoints = [
          "web",
          "websecure"
        ]
        middlewares = [
          "rem_subfolder"
        ]
        service = "netdata"
    

    运行以下命令获取您的主机 ip(默认路由),并从服务中设置为“url”。

    docker exec -it traefik ip route
    

    记得在 netdata.conf 中将 bind to = * 更改为 bind to = 172.24.0.1,使其只能从 traefik 访问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      相关资源
      最近更新 更多