Traefik版本: 1.6.4
我的公司使用Docker Swarm将应用程序作为服务呈现,并使用Traefik进行路由。到目前为止,一切都工作正常,但是我们在Traefik中实施后端运行状况检查遇到了麻烦。
我们所有的应用程序都公开运行状况检查,该检查运行正常,并通过简单的卷曲或在Web浏览器中命中返回200。我们已经将Docker标签应用到了集群服务中,以反映这些运行状况检查。例如:
traefik.backend.healthcheck.path=/health
traefik.backend.healthcheck.interval=30s
Traefik服务日志报告以下内容:
{"level":"warning","msg":"Health check still failing. Backend: \"backend-for-my-app\" URL: \"https://10.0.0.x:8080\" Reason: received non-200 status code: 406","time":"2018-07-10T19:41:25Z"}
在应用程序容器中,我们有运行ModSecurity的Apache。 ModSecurity阻止请求,因为主机标头是数字IP地址。我炮轰了Traefik容器,并在应用容器上弯了几下进行测试:
curl -k https://10.0.0.x:8080/health
<-ModSecurity阻止此操作,返回406
curl -k -H "Host: myapp.company.com" https://10.0.0.x:8080/health
<-正常工作,返回200
TLDR:我需要一种方法来设置Traefik后端运行状况检查的主机头。在Traefik文档中,我看不到这样做的方法。有没有人遇到这个问题,和/或知道解决方案?
答案 0 :(得分:0)
在Traefik 1.7中,有一个选项可以添加自定义标头,并定义后端运行状况检查的主机标头:
https://docs.traefik.io/v1.7/configuration/backends/docker/
例如traefik.backend.healthcheck.hostname=foobar.com
请注意1.7仍在RC中,但是您可以对其进行测试以查看它是否可以解决您的问题。如果在生产中需要此功能,则必须等待1.7才能达到稳定状态。