Ich möchte einige Websites auf einen neuen Server migrieren. Es dauert ein paar Tage, bis alle DNS-Änderungen vorgenommen sind. Deshalb wollte ich einen HAProxy-Reverse-Proxy einrichten, um den gesamten Datenverkehr vom alten Standort zum neuen Standort umzuleiten. Ich habe nicht viel Erfahrung mit einer solchen Konfiguration. Beim Besuch einer Domain erhalte ich eine Fehlermeldung mit folgendem Inhalt:
503 Service Unavailable No server is available to handle this request.
Dies ist die Konfiguration, die ich verwendet habe (mit versteckter IP-Adresse):
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 }
Antwort1
Dieser Fehler bedeutet, dass das Backend nicht als „aktiv“ gilt.
Stellen Sie zunächst sicher, dass der Backend-Server ausgeführt wird und von der HAProxy-Maschine aus zugänglich ist, telnet x.x.x.x 80
und stellen Sie beispielsweise sicher, dass eine Verbindung hergestellt wird.
Wenn Sie erfolgreich eine Verbindung herstellen können, müssen Sie als Zweites prüfen, ob das Backend eine Prüfung nicht besteht. Versuchen Sie option httpchk
, und check
aus der server
Zeile zu entfernen. (Wenn Sie nur einen Backend-Server haben, ist eine Prüfung nicht sehr wertvoll, Sie können sie aber später jederzeit wieder hinzufügen.)
Es kann sein, dass Ihr Host: localhost
bei der Überprüfung etwas Ungewöhnliches zurückgibt.