Curl zum Google Compute Load Balancer erhält den Fehler 502

8

Wenn ich eine POST-Anfrage mit Datei-Upload in meinen Google Compute Load Balancer (LB) locke, erhalte ich einen Fehler von 502. Wenn ich dem Worker-Knoten hinter dem LB denselben Curl mache, funktioniert . Wenn ich eine Bibliothek wie PHP Guzzle verwende, funktioniert es in beiden Richtungen. Wenn ich eine grundlegende GET-Anfrage für den LB mache, bekomme ich die richtige Antwort, aber das Arbeitsprotokoll bestätigt nicht das Empfangen der Anfrage, als ob der LB es zwischengespeichert hätte. Was ist los? FYI, google LB newb. Danke

Bearbeiten:

Ich benutze GCE HTTP LB. Der Curl-Befehl sieht folgendermaßen aus:

curl http://1.2.3.4 -F "key=value" -F "data=@path/to/file"

Dieser curl-Befehl funktioniert bei Verwendung der GCE VM IP, nicht jedoch bei Verwendung der GCE HTTP LB IP.

    
Matthew Scragg 02.06.2015, 16:03
quelle

2 Antworten

5

Diese eine Codezeile hat es für mich repariert:

%Vor%

Sie müssen natürlich den leeren Header Expect: zu den anderen Kopfzeilen hinzufügen, die Sie senden, aber diese Überschrift korrigiert cURL für die Verwendung mit Google HTTP Load Balancern.

Weitere Informationen

Das Google-Dokument Einrichten von HTTP (S) Load Balancing hat eine Notiz in der Nähe von Klicken Sie unten im Abschnitt Notizen und Einschränkungen darauf, dass HTTP/1.1 100 Continue -Antworten nicht unterstützt werden.

Es sieht so aus, als ob cURL standardmäßig Expect: 100-continue headers setzt, wenn Sie eine POST-Anfrage senden. Daher kann cURL anscheinend POST nicht standardmäßig über einen GCE HTTP Load Balancer senden.

Auf der Seite des Endnutzers werden nur 502 Antworten von Google angezeigt, was umso verwirrender ist, als es genau richtig ist, den gleichen POST auf einem Server zu erstellen, der nicht hinter dem Load Balancer liegt.

Allerdings führt das Vorhandensein von Expect: 100-continue dazu, dass der Google Load Balancer ausfällt und die Anfrage bricht.

Auf der Serverseite können die POST-Daten nicht geparst werden (es kommt nicht einmal zum Server, obwohl Content-Length korrekt gemeldet wird). In meinem Fall hat dies dazu geführt, dass der Server einen 500 Internal Server Error zurückgegeben hat, den die GCE LB als Fehler 502 Bad Gateway zurückweist und an den Benutzer zurücksendet.

Nach dem Hinzufügen eines leeren Expect: -Headers werden meine POST-Daten korrekt in meine Lastenausgleichs-VMs umgewandelt, sie analysieren und geben gültige Antworten zurück, und mein Client erhält statt einer 502 eine 200.

Danke an diese Frage , die geholfen hat zu verschwinden etwas Licht auf das Problem.

    
Ross Perkins 23.07.2016 06:10
quelle
1

Der Datenverkehr vom Lastenausgleich zu Ihrer Instanz ist standardmäßig nicht aktiviert. Leider ist dies nicht gut dokumentiert, und wirklich, wenn Sie einen Load Balancer erstellen, sollte dies automatisch geschehen.

Fügen Sie diese Firewallregel dem Netzwerk hinzu, in dem sich Ihr Lastenausgleichsmodul und Ihre VMs befinden:

%Vor%     
Tyguy7 03.12.2015 22:33
quelle