2017-04-23 1 views
1

J'ai 3 serveurs qui écoutent sur le port suivant,Comment rediriger vers plusieurs serveurs assis derrière HAProxy qui ont autre chemin begining

> 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 

J'utilise un serveur HAProxy pour rediriger le trafic vers ces backends, je suis en utilisant la configuration suivante sur haproxy qui ne semble pas s'entraîner.

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 

L'idée est de laisser HAProxy écouter sur 80, puis rediriger vers les backends d'écoute sur le port spécifié .. S'il vous plaît aider

Répondre

3

Quelques questions:

  • Vous avez plusieurs frontends tous écoutant sur le port 80; Je recommande d'avoir un seul frontend et en utilisant les ACL pour diriger le trafic vers votre backends. De the HAProxy documentation:

    Il peut y avoir autant de règles "use_backend" que souhaité. Toutes ces règles sont évaluées dans leur ordre de déclaration, et la première qui correspond affectera le backend.

  • vous fournir option httpchk, mais ne pas le soutien des contrôles sur vos server lignes; à partir de la documentation HAProxy (1.5.18 spécifiquement, mais comparable pour les autres versions)

    Le port et l'intervalle sont spécifiés dans la configuration du serveur.

    je recommande l'ajout d'un intervalle (en ms), tels que

    server custui01 10.21.4.234:80 check inter 2000 
    
  • Vous spécifiez mode http et option httpchk dans chaque backend; ceux-ci peuvent être combinés dans la section defaults, puis remplacés dans un backend si nécessaire.

  • J'aime utiliser hdr(host) pour vérifier l'URL de la requête HTTP, donc je réécrire acl url_api path_beg /api comme acl url_api hdr(host) -m beg api., mais qui est de préférence personnelle

La combinaison de ces recommandations avec vos exigences énumérées, voici une version mise à jour de votre fichier de configuration:

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