我正在使用marathon-lb运行DC / OS 1.7。
spray.io 1.3.3向所有marathon-lb / HAProxy健康检查调用返回400:request has a relative URI and is missing a Host header
所以marathon-lb永远不会将任何请求路由到服务。
马拉松json的健康检查是:
"healthChecks": [
{
"path": "/health",
"protocol": "HTTP",
"portIndex": 0,
"gracePeriodSeconds": 10,
"intervalSeconds": 2,
"timeoutSeconds": 10,
"maxConsecutiveFailures": 10,
"ignoreHttp1xx": false
} ],
并且在docker容器中使用spray.io进行日志记录是:
[WARN] [08/19/2016 23:53:42.534] [ASP服务-akka.actor.default-调度-5] [akka:// asp-service / user / IO-HTTP / listener-0/4]非法请求, 回复状态'400 Bad Request':非法请求:不能 建立有效的请求URI HttpRequest(GET,/ health,List(),Empty,HTTP / 1.0),请求有一个亲戚 URI并缺少
Host
标题
对于mesos managed ip:port,/health
端点可以正常工作。
我找不到任何关于通过marathon-lb制作HAProxy的文档更宽容或压制spray.io的400。
答案 0 :(得分:3)
通过马拉松json中的"labels": {
部分在标题中发送主机名:
"HAPROXY_0_BACKEND_HTTP_HEALTHCHECK_OPTIONS": " http-send-name-header Host\n timeout check {healthCheckTimeoutSeconds}s\n"
答案 1 :(得分:1)
请尝试添加HAPROXY_BACKEND_HTTP_HEALTHCHECK_OPTIONS
标签,您可以尝试在此示例中将www
替换为{hostname}
:
https://github.com/mesosphere/marathon-lb/wiki#custom-http-headers-in-health-check
其他链接: