Configurazione proxy inverso HAProxy

Aug 18 2020

Voglio migrare alcuni siti web su un nuovo server. Ci vogliono un paio di giorni per ottenere tutte le modifiche DNS, quindi volevo impostare un proxy inverso HAProxy per reindirizzare tutto il traffico dalla vecchia posizione alla nuova posizione. Non ho molta esperienza con una configurazione del genere. Quando visito un dominio, ricevo un errore che dice:

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

Questa è la configurazione che ho usato (con indirizzo IP nascosto):

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 }

Risposte

tater Aug 18 2020 at 20:56

Questo errore significa che il backend non è considerato "attivo".

Innanzitutto assicurati che il server di backend sia in esecuzione e accessibile dalla macchina HAProxy, ad esempio telnet x.x.x.x 80e assicurati che si connetta.

Se riesci a stabilire una connessione con successo, la seconda cosa da controllare è se il backend non ha superato il controllo. Prova a rimuovere option httpchke rimuovere checkdalla serverriga. (Quando hai un solo server di backend, un controllo non ha un valore enorme, ma puoi sempre aggiungerlo di nuovo in seguito)

È possibile che tu Host: localhoststia restituendo qualcosa di insolito nell'assegno.