HAProxy:ACL 无法检测客户端主机名

HAProxy:ACL 无法检测客户端主机名

我配置了一个 HAProxy 服务器,它应该检测请求是否来自server.company.cxx并将请求转发到 10.0.xx 上的服务器。如果请求不满足此条件,它会将请求转发到本地主机上的默认 Web 服务器。

因此,我使用这个配置:

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    # [...]

frontend public
    bind :8080

    acl is_company_server hdr(host) -i server.company.cxx

    use_backend company_www if is_company_server
    default_backend default

backend company_www
    timeout server 60s
    server www_server 10.x.x.x:8080

backend default
    timeout server 2s
    server default 127.0.0.1:80

我尝试访问http://server.mycompany.cxx:8080,但每个请求都以默认后端结束。就好像acl不起作用一样。

我激活了日志服务,但我只看到以下内容:

Jul  3 19:26:41 localhost haproxy[11070]: 70.x.x.x:60819 [03/Jul/2016:19:26:41.563] public default/default 0/0/0/0/0 304 174 - - ---- 1/1/0/0/0 0/0 "GET / HTTP/1.1"

我如何知道为什么 HAProxy 选择后端“默认”并且 ACL 失败?

答案1

其实,解决方案很简单:HAProxy 服务器监听的是 8080 端口。因此,URL 是http://server.company.cxx:8080/。因此,主机名是server.company.cxx:8080,其中包括端口号作为主机名的一部分。

这解决了问题:

frontend public
    bind :8080

    acl is_company_server hdr(host) -i server.company.cxx:8080

或者,可以这样解决:

frontend public
    bind :8080

    acl is_company_server hdr_dom(host) -i server.company.cxx

相关内容