【问题标题】:Traefik behind Apache proxyApache 代理背后的 Traefik
【发布时间】:2018-06-01 18:19:47
【问题描述】:

我想寻求帮助,我已经使用 Traefik 2-3 个月了,我们使用 Docker Swarm 创建了一个基础架构,在我们的集群中使用了 4 个专用服务器,并使用 Traefik 作为容器的反向代理域。

几天前,我们的 IT 出现故障并不得不重新创建它,我们得到了一个虚拟机,它位于专用服务器上并且也处理大量虚拟机,问题就来了。此虚拟机没有任何公共 IP 地址,它位于 apache 代理后面,该代理处理 80 上的所有传入请求并转发到运行 Traefik 的虚拟机。

我的问题是我们的 IT 正在使用 Traefik,它通过公共 IP 直接连接到 Internet,但我无法配置 Traefik 以在此 Apache 代理后面使用,我总是收到最小的错误消息:404 page not找到了。

VM 运行 CentOS。

如果有人遇到同样的问题并管理了解决方案,请回复,我希望 Traefik 可以在 Apache 代理后面工作。也许我们只是在这个虚拟机上缺少一些域/主机名配置,但我仍然不知道该怎么做。

【问题讨论】:

  • 您至少需要共享您的 apache 虚拟主机才能获得帮助。
  • 问题是我无法获取 Apache 配置,它由另一个组织处理。
  • 我很确定问题出在 Apache 内部的代理配置中。但是如果没有访问配置,就很难确定
  • :80> ServerName host.xy RewriteEngine On RewriteRule ^(.)$ host.xy ServerName host.xy SSLEngine在 SSLCertificateFile /etc/httpd/conf.d/host.xy.cert SSLCertificateKeyFile /etc/httpd/conf.d/host.xy.key SSLCertificateChainFile /etc/httpd/conf.d/host.xy.fullchain ProxyPass / @987654322 @ProxyPassReverse / vm-internall-ip-address
  • 尝试在ProxyPass directives 之后添加ProxyPreserveHost On

标签: apache docker docker-swarm traefik


【解决方案1】:

显然 traefik 前面的 Apache 没有将 Host 标头正确转发到 traefik。

为了将您的请求代理到正确的后端,traefik 使用标准 HTTP 标头 Host,它基本上是最终用户请求的主机名(他在浏览器中键入的内容)。

如果您将 apache 放在前面并添加如下代理规则:

ProxyPass / x.y.z.w
ProxyPassReverse / x.y.z.w

其中x.y.z.w是traefik的IP地址,Host头部会被apache重写为x.y.z.w

这意味着用户请求的原始Host将丢失,traefik将无法正确代理。

为了让 Apache 在转发调用到代理时保留来自客户端的 Host 标头,您需要添加以下配置:

ProxyPreserveHost On

就在ProxyPass 指令之后。

【讨论】:

  • 谢谢!!现在干净多了! :)
  • 3 年后,这个答案在大量其他搜索没有帮助的地方有所帮助。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 2015-12-25
  • 1970-01-01
  • 2017-07-09
相关资源
最近更新 更多