Traefik:如何配置路由以将每个请求定向到 http 服务?
Traefik: How to configure route to direct every request to http service?
我太笨了,Google帮不上什么忙。
我正在尝试设置最简单的配置:
- Traefik 2(在最新的 Docker 容器中),处理传入请求...
- 应该将 所有 传入请求(http、https)定向到另一个服务,即 Traefik whoami 演示容器(我已经 运行) ...
- 终止 SSL 连接时,通过端口 80 上的 http 调用服务...
- 使用带有明确定义路由的配置文件时
我该如何配置?这是我的尝试:
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设置的Host
header(设置为proxyhost ) 使服务网络应用程序重定向回我的代理。 passHostHeader: false
配置是必要的:
services:
whoami:
loadBalancer:
passHostHeader: false # <------ added this
servers:
- url: "http://whoami-test.azurewebsites.net/"
将代理主机作为“主机”传递 header 会导致某些服务 301 重定向回代理,从而导致代理和服务之间的重定向循环。 .NET Core 应用程序 (Kestrel) 将改为响应“错误请求”。省略 header 是我的解决方案。
我太笨了,Google帮不上什么忙。
我正在尝试设置最简单的配置:
- Traefik 2(在最新的 Docker 容器中),处理传入请求...
- 应该将 所有 传入请求(http、https)定向到另一个服务,即 Traefik whoami 演示容器(我已经 运行) ...
- 终止 SSL 连接时,通过端口 80 上的 http 调用服务...
- 使用带有明确定义路由的配置文件时
我该如何配置?这是我的尝试:
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设置的Host
header(设置为proxyhost ) 使服务网络应用程序重定向回我的代理。 passHostHeader: false
配置是必要的:
services:
whoami:
loadBalancer:
passHostHeader: false # <------ added this
servers:
- url: "http://whoami-test.azurewebsites.net/"
将代理主机作为“主机”传递 header 会导致某些服务 301 重定向回代理,从而导致代理和服务之间的重定向循环。 .NET Core 应用程序 (Kestrel) 将改为响应“错误请求”。省略 header 是我的解决方案。