Haproxy 和 CNAME

Haproxy 和 CNAME

我想为这两台服务器创建一个简单的负载平衡器。

我认为问题出在 CNAME 记录上。

假设我在 AppFog.com 上有两个相同的应用程序。

应用程序1.aws.af.cm应用程序2.aws.af.cm

这是我的 haproxy.cfg 文件:

global
    maxconn 2000
    daemon

defaults
    mode http
    clitimeout 60000
    srvtimeout 30000
    contimeout 4000
    option httpclose

listen http_proxy 
    bind [myip]:80
    mode http
    stats enable
    stats auth user:passwd
    stats uri /stats
    balance source
    option httpchk
    option forwardfor
    server host01 app1.aws.af.cm:80 maxconn 300 check
    server host02 app2.aws.af.cm:80 maxconn 300 check

但这只能解析域 app1.aws.af.cm 和 app2.aws.af.cm 的 IP,如果我在 Web 浏览器中打开此 IP,显然不起作用。

问题是 AppFog 没有应用程序的公共 IP(与 OpenShift 相同)。

Haproxy 如何才能在负载均衡器和这两台服务器之间建立正确的连接?

例子:

这是真正的应用程序 -http://freechat.eu01.aws.af.cm

Haproxy 仅解析此域的 IP,即 46.51.204.8:80

当然这个IP不会显示我的应用程序,只有一个错误页面。

抱歉我的英语不好。

答案1

在处理您的问题时遇到了一些麻烦。不过,需要记住的一点是,HTTP 请求将请求的域名作为 HTTP 标头中的 Host 字段。

因此,如果满足以下条件,负载平衡器和 Web 服务器通常会转发请求或响应请求:姓名绑定与主机头匹配。

也许这样可以让事情变得更清楚一些,或者你可以尝试重新措辞你的问题?

答案2

我也不确定我是否完全理解这一点。当我的网站绑定到主机标头而不是 IP 地址时,我所要做的就是确保健康检查也使用该标头:

option httpchk HEAD /mystatus HTTP/1.1\r\nHost:\ example.com

这样它就可以通过健康检查。当客户端连接时,他们将输入正确的域名,例如 www.example.com。据我所知,主机头信息没有丢失,因此连接将正常工作。

相关内容