Routing 如何重定向到HAProxy后面的多个服务器,这些服务器具有不同的起始路径

Routing 如何重定向到HAProxy后面的多个服务器,这些服务器具有不同的起始路径,routing,load-balancing,haproxy,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服务器将流量重定向到这些后端,我

我有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上侦听,然后重定向到在指定端口上侦听的后端。。请帮助解决以下几个问题:

  • 您有多个
    前端
    全部监听端口80;我建议使用一个前端并使用ACL将流量定向到
    后端。发件人:
    可能有许多“使用后端”规则。所有这些规则都是无效的
    按照声明顺序求值,第一个匹配的将
    分配后端

  • 您提供了
    选项httpchk
    ,但不支持对
    服务器
    行进行检查;来自HAProxy文档(具体为1.5.18,但与其他版本类似)

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

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

  • 在每个后端指定
    模式http
    选项httpchk
    ;可以在
    defaults
    部分中组合这些属性,然后在必要时在后端重写它们

  • 我喜欢使用
    hdr(主机)
    检查HTTP请求的URL,因此我会将
    acl URL\u api path\u beg/api
    重写为
    acl URL\u api hdr(主机)-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

您是否有一个具有多个前端的haproxy示例,但每个前端都有不同的端口或正在侦听自己的端口?@ArtanisZeratul您可以使用我发布的示例代码,但复制
前端
节,并在
绑定
行中更改侦听端口。如果您希望另一个前端监听(例如)HTTPS流量(使用端口443),则可以这样做。
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