我想请求一些帮助,我一直在与Traefik合作2-3个月,我们使用Docker Swarm创建了一个基础架构,在我们的集群中使用了4个专用服务器,并使用Traefik作为容器的反向代理域。
前几天我们的IT坏了,不得不重新创建它,我们得到了一台虚拟机,它位于专用服务器上并处理大量虚拟机,这就是问题所在。该虚拟机没有任何公共IP地址,它位于一个apache代理后面,该代理处理80上的所有传入请求,并转发到运行Traefik的虚拟机。
我的问题是我们的IT正在与使用公共IP直接连接到互联网的Traefik合作,但是我无法将Traefik配置为使用此Apache代理,我总是得到最小的错误消息:404页面没有找到。
VM运行CentOS。
如果有人遇到同样的问题并管理解决方案请回复,我希望Traefik可以在Apache代理后面工作。也许我们在这个虚拟机上只缺少一些域/主机名配置,但我仍然不知道该怎么做。
答案 0 :(得分:0)
显然,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
指令之后。