Configuration du proxy inverse HAProxy

Aug 18 2020

Je souhaite migrer certains sites Web vers un nouveau serveur. Il faut quelques jours pour que toutes les modifications DNS soient effectuées, je voulais donc configurer un proxy inverse HAProxy pour rediriger tout le trafic de l'ancien emplacement vers le nouvel emplacement. Je ne suis pas très expérimenté avec une telle config. Lors de la visite d'un domaine, j'obtiens une erreur disant:

503 Service Unavailable No server is available to handle this request.

Voici la configuration que j'ai utilisée (avec adresse IP cachée):

global

  log         127.0.0.1 local2

    chroot  /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group   haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend localhost
   bind *:80
   bind *:443 ssl crt /etc/pki/tls/certs/haproxy.pem
   redirect scheme https if !{ ssl_fc }
   mode http
   default_backend node

backend node
    mode http
    option forwardfor
    option httpchk HEAD / HTTP/1.1\r\nHost:localhost
    server dcnode1 x.x.x.x:80 check
    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto https if { ssl_fc }

Réponses

tater Aug 18 2020 at 20:56

Cette erreur signifie que le backend n'est pas considéré comme «up».

Assurez-vous d'abord que le serveur principal est en cours d'exécution et accessible depuis la machine HAProxy, par exemple telnet x.x.x.x 80et assurez-vous qu'il se connecte.

Si vous parvenez à établir une connexion avec succès, la deuxième chose à vérifier est si le backend échoue à une vérification. Essayez de supprimer option httpchket de supprimer checkde la serverligne. (Lorsque vous n'avez qu'un seul serveur backend, une vérification n'est pas d'une grande valeur, mais vous pouvez toujours la rajouter plus tard)

Il se peut que vous Host: localhostretourniez quelque chose d'inhabituel dans le chèque.