Traefik:如何配置路由以将每个请求定向到 http 服务?

Traefik: How to configure route to direct every request to http service?

我太笨了,Google帮不上什么忙。

我正在尝试设置最简单的配置:

我该如何配置?这是我的尝试:

entryPoints:
  web:
    address: :80
  websecure:
    address: :443

log:
  filePath: "/home/LogFiles/traefik.log"
  level: DEBUG

accessLog:
  filePath: "/home/LogFiles/trafik-access.log"

providers:
  file:
    filename: "/home/traefik.yml"

http:
  routers:
    route-https:
      rule: "Host(`traefik-test.azurewebsites.net`) && PathPrefix(`/whoami`)"
      service: "whoami"
      tls: {}
    route-http:
      rule: "Host(`traefik-test.azurewebsites.net`) && PathPrefix(`/whoami`)"
      service: "whoami"

  services:
    whoami:
      loadBalancer:
        servers:
          - url: "http://whoami-test.azurewebsites.net/"

我不确定 https 到 http 的转换是如何工作的。文档说它是自动发生的。 Another part of the doc 表示您必须使用两个路由器,而 tls: {} 部分表示终止 TLS 连接。这就是我在上面所做的。 (对吗?)

可以在浏览器中通过 http 和 https 毫无问题地访问 whomami 服务 URL。但是当通过 Traefik 调用它时(对于上面的示例,这将是 https://traefik-test.azurewebsites.net/whoami)我得到一个 400 并且浏览器显示“Bad Request”。我怀疑 https->http 部分不工作。

网络上的示例通常展示了如何编排由 Traefik 发现的多个容器。那不是我在这里做的。我只想告诉 Treafik 我已经 运行 的服务。接受每个请求,通过 http 将所有内容路由到我的服务。应该很简单吧?

如有任何提示,我们将不胜感激。

有两个错误阻止我的配置工作。

第一个:讨厌的 YAML。看到“-”前的两个空格了吗?

        servers:
          - url: "http://whoami-test.azurewebsites.net/"

他们必须这样做才能有效:

        servers:
        - url: "http://whoami-test.azurewebsites.net/"

二号:Traefik设置的Hostheader(设置为proxyhost ) 使服务网络应用程序重定向回我的代理。 passHostHeader: false 配置是必要的:

  services:
    whoami:
      loadBalancer:
        passHostHeader: false # <------ added this
        servers:
          - url: "http://whoami-test.azurewebsites.net/"

将代理主机作为“主机”传递 header 会导致某些服务 301 重定向回代理,从而导致代理和服务之间的重定向循环。 .NET Core 应用程序 (Kestrel) 将改为响应“错误请求”。省略 header 是我的解决方案。