如何重定向到位于HAProxy后面的具有不同路径开头的多个服务器

时间:2017-04-23 14:54:53

标签: routing load-balancing haproxy

我有3台服务器监听以下端口,

> 10.21.5.39:80    -->   api.something.com
> 10.21.4.234:80    -->   *.something.com
> 10.21.5.73:80     -->   coolapi.something.com
> 10.21.5.73:3002    -->   school.something.com

我正在使用HAProxy服务器将流量重定向到这些后端,我在haproxy上使用以下配置似乎没有锻炼。

frontend api
       bind *:80
       acl url_api path_beg /api
       use_backend api-backend if url_api

frontend custui
       bind *:80
       acl url_custui path_beg *
       use_backend custui-backend if url_custui


frontend backoffice
       bind *:80
       acl url_backoffice path_beg /backoffice
       use_backend backoff-backend if url_backoffice

frontend partnerui
       bind *:80
       acl url_partnerui path_beg /partner
       use_backend partner-backend if url_partnerui


backend api-backend
    mode    http
    option  httpchk
    server  api01 10.21.5.39:80

backend custui-backend
    mode    http
    option  httpchk
    server  custui01 10.21.4.234:80

backend backoff-backend
    mode http
    option httpchk
    server backoff01 10.21.5.73:80


backend partner-backend
    mode http
    option httpchk
    server backoff01 10.21.5.73:3002

所以我的想法是让HAProxy监听80,然后重定向到监听指定端口的后端..请帮忙

1 个答案:

答案 0 :(得分:4)

有几个问题:

  • 您有多个frontends全部收听端口80;我建议使用单个前端并使用ACL将流量定向到backends。来自the HAProxy documentation
      

    可能有多少" use_backend"根据需要的规则。所有这些规则都是   按照他们的声明顺序进行评估,并且第一个匹配将   分配后端。

  • 您提供了option httpchk,但对server行的检查没有任何支持;来自HAProxy文档(特别是1.5.18,但与其他版本相当)

      

    端口和间隔在服务器配置中指定。

    我建议添加间隔(以毫秒为单位),例如

    server  custui01 10.21.4.234:80 check inter 2000
    
  • 您在每个后端指定mode httpoption httpchk;这些可以在defaults部分合并,然后在必要时在后端覆盖。

  • 我喜欢使用hdr(host)来检查HTTP请求的网址,因此我会将acl url_api path_beg /api重写为acl url_api hdr(host) -m beg api.,但这取决于个人偏好

将这些建议与您列出的要求相结合,以下是配置文件的更新版本:

defaults
   mode    http
   option  httpchk

frontend something.com
   bind *:80

   acl url_api path_beg /api
   use_backend api-backend if url_api

   acl url_backoffice path_beg /backoffice
   use_backend backoff-backend if url_backoffice

   acl url_partnerui path_beg /partner
   use_backend partner-backend if url_partnerui

   # Catches anything not covered by use_backend above
   default_backend custui-backend

backend api-backend
    server  api01    10.21.5.39:80   check inter 2000

backend backoff-backend
    server backoff01 10.21.5.73:80   check inter 2000

backend partner-backend
    server backoff01 10.21.5.73:3002 check inter 2000

backend custui-backend
    server  custui01 10.21.4.234:80  check inter 2000