如何使用HAProxy根据主机名转移流量?


17

HAProxy设置了许多监听其他端口的应用程序服务器,在此方面取得了一些初步的成功。

现在,我有另一个Web服务器正在一个端口上侦听,我想对配置进行哪些更改,以使主机名也可以传输流量。

以下是当前设置,假设:

  • 我的Apache Web服务器在examplecom:8001上运行
  • 我那堆应用服务器0.0.0.0:8081,0.0.0.0:8082,0.0.0.0:8083
global
  log 127.0.0.1 local0
  log 127.0.0.1 local1 notice
  maxconn 4096
  debug
  #quiet
  #user haproxy
  #group haproxy

defaults
  log global
  mode  http
  option  httplog
  option  dontlognull
  retries 3
  redispatch
  maxconn 2000
  contimeout  5000
  clitimeout  50000
  srvtimeout  50000

listen appservers 0.0.0.0:80
  mode http
  balance roundrobin
  option httpclose
  option forwardfor
  #option httpchk HEAD /check.txt HTTP/1.0
  server  inst1 0.0.0.0:8081 cookie server01 check inter 2000 fall  3
  server  inst2 0.0.0.0:8082 cookie server02 check inter 2000 fall  3
  server  inst3 0.0.0.0:8083 cookie server01 check inter 2000 fall  3
  server  inst4 0.0.0.0:8084 cookie server02 check inter 2000 fall  3
  capture cookie vgnvisitor= len 32

(欢迎对^设置进行其他评论。)

现在,我想继续上面的操作,但此外,以防万一-如果主机名是myspecialtopleveldomain <dot> com,则希望将流量流到example <dot> com:8001

〜B


2
可以使用前端和后端配置根据主机名将请求发送到不同的服务器。您的问题有点令人困惑,但您提到example.com:8001,但它不在任何地方的配置中。这是端口80上对myspecialtopleveldomain.com的请求的目的地吗?也许您可以提供一些用户可以输入的示例URL,以及希望这些代理通过haproxy发送的URL。
ThatGraemeGuy 2010年

Answers:


24

这是一个例子:

frontend http
        bind 0.0.0.0:80
        default_backend www
        # NAT static host names and static paths in other hostnames to a different backend
        acl host_static hdr_beg(host) -i static.
        acl url_static  path_beg         /static
        use_backend static if host_static or url_static

backend www
        balance roundrobin
        server  qa1 10.177.1.81:80
        server  qa2 10.177.1.45:80

backend static
        balance roundrobin
        server  media1 10.177.0.86:80

感谢您提供的示例配置,您刚刚帮助我完成了负载均衡器配置:)
isNaN1247 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.