502 zuordnen: Proxy Manager selbst oder ein HTTP-Proxy davor
Ein 502 hat zwei moegliche Absender, und sie sehen gleich aus:
- Der Proxy Manager selbst. Sein nginx steht, der Dienst dahinter
nicht. Nachgemessen: nach einem Neustart antwortet die Schnittstelle
erst nach rund zehn Sekunden mit 200 - davor kommen 000, dann 502.
- Ein HTTP-Proxy davor, der localhost:81 von SEINEM Rechner aus zu
erreichen versucht und scheitert.
Unterscheiden laesst sich das an der Server-Kopfzeile: der Proxy Manager
nennt sich "openresty", ein Proxy traegt sich zusaetzlich mit "Via:"
ein. Beide Faelle nachgestellt und die Kopfzeilen abgenommen.
Die Meldung wertet das jetzt aus und sagt im ersten Fall "kurz warten,
er startet noch", im zweiten "das war nicht der Proxy Manager, pruefe
noproxy". Vorher stand dort pauschal "Serverfehler" mit einem Verweis
auf noproxy - der im haeufigeren Fall in die falsche Richtung zeigte.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+41
-8
@@ -3772,9 +3772,9 @@ EOF
|
||||
# Antwort, HTTP-Code und curls eigene Fehlermeldung getrennt
|
||||
# einsammeln - ohne die drei laesst sich hinterher nicht sagen, WORAN
|
||||
# es lag, und genau das ist hier der haeufigste Zeitfresser.
|
||||
local body code cerr rc=0
|
||||
cerr="$(mktemp)"
|
||||
body="$(curl -sS --max-time 20 --noproxy '*' -w '\n%{http_code}' \
|
||||
local body code cerr hdrf rc=0
|
||||
cerr="$(mktemp)"; hdrf="$(mktemp)"
|
||||
body="$(curl -sS --max-time 20 --noproxy '*' -w '\n%{http_code}' -D "$hdrf" \
|
||||
-X POST "$base/api/tokens" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d "{\"identity\":\"$NPM_ADMIN_EMAIL\",\"secret\":\"$NPM_ADMIN_PASSWORD\"}" \
|
||||
@@ -3784,7 +3784,7 @@ EOF
|
||||
|
||||
local tok; tok="$(json_str "$body" token)"
|
||||
if [ -n "$tok" ]; then
|
||||
rm -f "$cerr"
|
||||
rm -f "$cerr" "$hdrf"
|
||||
printf '%s' "$tok"
|
||||
return 0
|
||||
fi
|
||||
@@ -3796,6 +3796,15 @@ EOF
|
||||
local cmsg; cmsg="$(sed -n '1p' "$cerr" 2>/dev/null)"
|
||||
if [ -n "$cmsg" ]; then printf ' curl sagt : %s\n' "$cmsg" >&2; fi
|
||||
rm -f "$cerr"
|
||||
# Wer hat geantwortet? Der Proxy Manager nennt sich "openresty", ein
|
||||
# HTTP-Proxy traegt sich ueblicherweise mit "Via:" ein. Daran laesst
|
||||
# sich ein 502 eindeutig zuordnen - sonst raet man zwischen
|
||||
# "Dienst startet noch" und "Proxy dazwischen".
|
||||
local srv via
|
||||
srv="$(sed -n 's/^[Ss]erver:[[:space:]]*//p' "$hdrf" 2>/dev/null | tr -d '\r' | head -1)"
|
||||
via="$(sed -n 's/^[Vv]ia:[[:space:]]*//p' "$hdrf" 2>/dev/null | tr -d '\r' | head -1)"
|
||||
rm -f "$hdrf"
|
||||
if [ -n "$srv" ]; then printf ' Antwortete : %s%s\n' "$srv" "${via:+ (ueber $via)}" >&2; fi
|
||||
# Der Proxy Manager verpackt seine Meldung in "error" - sie ist die
|
||||
# nuetzlichste Zeile ueberhaupt und gehoert nach oben, nicht ans Ende.
|
||||
local m; m="$(json_str "$body" message)"
|
||||
@@ -3858,11 +3867,35 @@ EOF
|
||||
printf ' -> curl nennt einen Proxy. Pruefen: %s noproxy\n' "$SELF" >&2 ;;
|
||||
esac
|
||||
;;
|
||||
5??)
|
||||
printf ' Es hat etwas geantwortet, aber mit einem Serverfehler.
|
||||
Kommt die Antwort ueberhaupt vom Proxy Manager? Ein
|
||||
502|503|504)
|
||||
case "$srv" in
|
||||
openresty*|nginx*)
|
||||
if [ -z "$via" ]; then
|
||||
printf ' Der Proxy Manager selbst hat geantwortet (%s) - aber der
|
||||
Dienst DAHINTER ist nicht erreichbar. Das ist normal, solange er
|
||||
noch startet: nach einem Neustart dauert es rund zehn Sekunden,
|
||||
bis die Schnittstelle antwortet.
|
||||
|
||||
Kurz warten und noch einmal, sonst ins Protokoll sehen:
|
||||
%s logs
|
||||
%s proxy restart\n' "$srv" "$SELF" "$SELF" >&2
|
||||
else
|
||||
printf ' Die Antwort kam ueber einen Proxy (Via: %s), nicht direkt.
|
||||
Pruefen: %s noproxy\n' "$via" "$SELF" >&2
|
||||
fi ;;
|
||||
'')
|
||||
printf ' Es hat etwas geantwortet, nennt sich aber nicht. Ein
|
||||
HTTP-Proxy im Netz antwortet an dieser Stelle gern selbst:
|
||||
%s noproxy\n' "$SELF" >&2
|
||||
%s noproxy\n' "$SELF" >&2 ;;
|
||||
*)
|
||||
printf ' Geantwortet hat "%s" - das ist nicht der Proxy Manager
|
||||
(der nennt sich "openresty"). Vermutlich ein HTTP-Proxy oder ein
|
||||
anderer Dienst auf dem Port:
|
||||
%s noproxy\n' "$srv" "$SELF" >&2 ;;
|
||||
esac
|
||||
;;
|
||||
5??)
|
||||
printf ' Es hat etwas geantwortet, aber mit einem Serverfehler.\n' >&2
|
||||
;;
|
||||
*)
|
||||
printf ' Unerwartete Antwort - erwartet wurde ein Feld "token".\n' >&2
|
||||
|
||||
Reference in New Issue
Block a user