在haproxy后端使用域而不是IP

时间:2015-12-10 09:01:01

标签: networking haproxy

我有2个虚拟主机

app.example.com:80在IP地址xxx.xxx.xxx.xxx

app2.example.com:80在IP地址yyy.yyy.yyy.yyy

我的haproxy ipaddress是sss.sss.sss.sss

这是haproxy配置:

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

frontend www-http
    mode http
    bind *:80
    default_backend appname
    stats enable
    stats uri /haproxy?stats
    stats auth admin:password
    stats show-node

backend appname
  balance roundrobin
  option httpclose
  option forwardfor
  server lamp1 app.example.com:80 check
  server lamp2 app2.example.com:80 check

尝试使用haproxy ipaddress进行访问时,Web浏览器会返回xampp信息中心而不是后端内容。

如何让haproxy重定向到后端内容?

2 个答案:

答案 0 :(得分:2)

我相信功能现在可用于1.6, http://blog.haproxy.com/2015/10/14/whats-new-in-haproxy-1-6/

您配置的内容只是将请求与实例之间的请求进行权衡:

server lamp1 app.example.com:80 check
server lamp2 app2.example.com:80 check

如果他们是2个单独的应用程序,请尝试:

frontend www-http
mode http
bind sss.sss.sss.sss:80
stats enable
stats uri /haproxy?stats
stats auth admin:password
stats show-node

acl app01 hdr(Host) -i app.example.com
acl app02 hdr(Host) -i app02.example.com

use_backend app01 if app01
use_backend app02 if app02

backend app01
balance roundrobin
option httpclose
option forwardfor
server lamp1 xxx.xxx.xxx.xxx:80 check

backend app02
balance roundrobin
option httpclose
option forwardfor
server lamp2 yyy.yyy.yyy.yyy:80 check

如果您现在使用app.example.com点击您的haproxy,您将转到lamp1,app2.example.com将带您到lamp2

如果你想将所有内容转发到ip到后端并且不关心额外的匹配和映射,那么id使用直接监听,而不是前端:

 listen SOMENAME sss.sss.sss.sss:80
 balance leastconn
 mode http
 server lamp1 xxx.xxx.xxx.xxx:80
 server lamp2 yyy.yyy.yyy.yyy:80

答案 1 :(得分:0)

如果我没记错的话,“default_backend”希望将“后端”值作为属性,而不是“监听”。

https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4.2-default_backend

所以我建议改为

backend appname
  balance roundrobin
  option httpclose
  option forwardfor
  server lamp1 app.example.com:80 check
  server lamp2 app2.example.com:80 check