我需要在具有不同主机名的多个正在运行的服务器之间进行负载平衡。我无法在每个主机上设置相同的虚拟主机。
是否可以只对多个服务器进行一个监听配置并使健康检查应用该http-send-name-header Host
指令?我正在使用 HAProxy 1.5。
我想出了这个工作 haproxy.cfg,正如你所看到的,我必须为每个健康检查设置一个不同的主机名,因为健康检查忽略http-send-name-header Host
. 我更喜欢使用变量或其他方法并使事情更简洁。
global
log 127.0.0.1 local0 notice
maxconn 2000
user haproxy
group haproxy
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
timeout connect 5000
timeout client 10000
timeout server 10000
stats enable
stats uri /haproxy?stats
stats refresh 5s
balance roundrobin
option httpclose
listen inbound :80
option httpchk HEAD / HTTP/1.1\r\n
server instance1 127.0.0.101 check inter 3000 fall 1 rise 1
server instance2 127.0.0.102 check inter 3000 fall 1 rise 1
listen instance1 127.0.0.101:80
option forwardfor
http-send-name-header Host
option httpchk HEAD / HTTP/1.1\r\nHost:\ www.example.com
server www.example.com www.example.com:80 check inter 5000 fall 3 rise 2
listen instance2 127.0.0.102:80
option forwardfor
http-send-name-header Host
option httpchk HEAD / HTTP/1.1\r\nHost:\ www.bing.com
server www.bing.com www.bing.com:80 check inter 5000 fall 3 rise 2
Run Code Online (Sandbox Code Playgroud)
更新:在您描述的情况下,您需要 HTTP/1.1 检查,这需要硬编码主机名。鉴于 1.5 版本的文档,似乎没有办法避免这种情况,除非您有能力放弃 http 检查(当然通常不建议这样做)。
原始答案:虽然我不熟悉 haproxy 1.5 的变化,但我在 1.4 中要做的事情(并且我相当确定它仍然适用于 1.5)如下。请注意,前后端分离只是为了个人方便,您可以只使用listen。
defaults
mode http
option httplog
timeout connect 5000
timeout client 10000
timeout server 10000
frontend inbound
bind 127.0.0.1:8000
default_backend webservers
backend webservers
option forwardfor
option httpchk HEAD / HTTP/1.0
http-send-name-header Host
server google www.google.com:80 check inter 5000 fall 3 rise 2
server bing www.bing.com:80 check inter 5000 fall 3 rise 2
Run Code Online (Sandbox Code Playgroud)
结果:
$ curl -i localhost:8000
HTTP/1.1 301 Moved Permanently
Cache-Control: no-cache
Content-Length: 0
Location: http://www.bing.com/
Server: Microsoft-IIS/8.0
P3P: CP="NON UNI COM NAV STA LOC CURa DEVa PSAa PSDa OUR IND"
Set-Cookie: _HOP=I=1&TS=1399981378; path=/
Edge-control: no-store
X-MSEdge-Ref: Ref A: 26CEE14531BF45EFAC91FAC3D1945EDF Ref B: 42CE8D142D427C30F7851B56F38837A6 Ref C: Tue May 13 04:42:58 2014 PST
Date: Tue, 13 May 2014 11:42:57 GMT
$ curl -i localhost:8000
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
X-Content-Type-Options: nosniff
Date: Tue, 13 May 2014 11:43:00 GMT
Expires: Thu, 12 Jun 2014 11:43:00 GMT
Cache-Control: public, max-age=2592000
Server: sffe
Content-Length: 219
X-XSS-Protection: 1; mode=block
Alternate-Protocol: 80:quic
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
$
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18828 次 |
最近记录: |