我想为这两台服务器创建一个简单的负载平衡器。
我认为问题出在 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。据我所知,主机头信息没有丢失,因此连接将正常工作。