Einfaches Haproxy-TCP-Passthrough führt zu einer sehr langsamen Netzwerkübertragungsgeschwindigkeit

Einfaches Haproxy-TCP-Passthrough führt zu einer sehr langsamen Netzwerkübertragungsgeschwindigkeit

Ich habe eine einfache Haproxy-Instanz auf einer Neuinstallation von Debian 10 Buster eingerichtet. Ich habe einige einfache notwendige Konfigurationen hinzugefügt, um den Passthrough zur betreffenden IP-Adresse zu aktivieren (die in der folgenden Konfiguration redigiert wurde).

Die Konfigurationsdatei:

global
    log /dev/log    local0
    log /dev/log    local1 notice

    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

    # Default SSL material locations
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

    # Default ciphers to use on SSL-enabled listening sockets.
    # For more information, see ciphers(1SSL). This list is from:
    #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
    # An alternative list with additional directives can be obtained from
    #  https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
    ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
    ssl-default-bind-options no-sslv3

defaults
    log global
    mode    http
    option  httplog
    option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http


frontend myfrontend
  bind *:80
  mode tcp
  default_backend mybackendhttp

frontend myfrontendhttps
  bind *:443
  mode tcp
  use_backend mybackendhttps

backend mybackendhttp
  mode tcp
  option ssl-hello-chk
  server server1 ***********:80

backend mybackendhttps
  mode tcp
  option ssl-hello-chk
  server server1 ************:443

Die Änderungen, die ich vorgenommen habe (wenn ich einen Diff mit der Originaldatei mache) (redigierte IP):

+
+
+frontend myfrontend
+  bind *:80
+  mode tcp
+  default_backend mybackendhttp
+
+frontend myfrontendhttps
+  bind *:443
+  mode tcp
+  use_backend mybackendhttps
+
+backend mybackendhttp
+  mode tcp
+  option ssl-hello-chk
+  server server1 ***********:80
+
+backend mybackendhttps
+  mode tcp
+  option ssl-hello-chk
+  server server1 **********:443

Alles funktioniert einwandfrei, aber aus irgendeinem Grund ist die Netzwerkleistung unglaublich langsam, wenn ich eine Browseranforderung von meinem PC aus oder eine Curl-Anforderung über die Befehlszeile oder per Mobilgerät mache. Ich erhalte etwa 200–300 KB/s, während ich normalerweise etwa das Zehnfache erreichen würde.

Wenn ich die gleiche Anfrage über Curl auf einem VPS versuche, erhalte ich eine viel höhere Geschwindigkeit (5000 kb/s).

Der Haproxy läuft auf einer GCP-Compute-Instance-VM, daher bezweifle ich, dass es ein Problem mit der Netzwerkbandbreite ist, aber ich kann versuchen, einen einfachen statischen HTTP-Dienst einzurichten und den Vergleich zu ziehen.

Was könnte die Ursache des Problems sein? Wie könnte ich das diagnostizieren? Würde das Aktivieren von Protokollen auf Haproxy einen besseren Einblick in dieses Problem bieten?

Ich bin auf die folgende Frage gestoßen, die ein ähnliches Verhalten zu beschreiben scheint:

HAProxy SSL-Antworten sehr langsam

Die OpenSSL-Bibliothek muss den Hostnamen in /etc/hosts richtig festlegen

Allerdings ist mir nicht klar, was „richtig eingestellt“ bedeutet.

Antwort1

Ich antworte, weil ich nicht genug Ruf habe.

In /etc/hostsmöchten Sie diese Zeile finden:

127.0.0.1 localhost

Ersetzen Sie es localhostdurch Ihren FQDN, z. B. haproxy.domain.com oder was auch immer. Es sollte mit dem Hostnamen Ihres Servers identisch sein.

Unter Debian können Sie den Hostnamen mit diesem Befehl festlegen:

hostname-ctl set-hostname haproxy.domain.com

verwandte Informationen