Absturzschleife des Proxy Managers: IP-Bereich-Abruf abschaltbar
Das Containerprotokoll eines Kunden zeigte, was hinter dem 502 steckte: der Dienst stuerzt in einer Schleife ab. [IP Ranges] Fetching https://ip-ranges.amazonaws.com/ip-ranges.json Uncaught Error: Client network socket disconnected before secure TLS connection was established ... node --abort_on_uncaught_exception ... index.js Starting backend ... [und das immer wieder] Beim Start holt der Proxy Manager IP-Bereiche von AWS und Cloudflare - gebraucht wird das nur fuer Zugriffslisten mit deren Adressbereichen, auf einem internen Server also nie. Der Code faengt Fehler dabei ab, dieser kommt aber asynchron vom TLS-Socket und laeuft am catch vorbei; weil node mit --abort_on_uncaught_exception laeuft, bricht der Prozess ab, s6 startet neu, und nginx davor antwortet durchgehend mit 502. Am Abbild nachgesehen und ausprobiert: - IP_RANGES_FETCH_ENABLED=false verhindert den Abruf; im Protokoll steht dann "IP Ranges fetch is disabled by environment variable", das Backend laeuft. - Scheitert der Abruf sauber (DNS-Fehler, Verbindung abgelehnt), faengt der Code ihn ab und der Dienst laeuft weiter - der Absturz haengt also wirklich an der gekappten TLS-Verbindung. - initTimer() laeuft unabhaengig vom Schalter und versucht es alle sechs Stunden erneut. Das steht als Hinweis samt extra_hosts in der README. Neu: NPM_IP_RANGES_FETCH, Vorgabe false. Und die Fehlermeldung erkennt den Fall selbst - sie zaehlt Startversuche und Ausnahmen im Containerprotokoll und nennt den Schalter, statt den Benutzer weiter auf "startet noch" warten zu lassen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -554,6 +554,7 @@ Die wichtigsten Schalter:
|
||||
| `NPM_ENABLED` | `on`/`off` – soll der Proxy-Manager-Container überhaupt laufen? Siehe [12.4](#124-proxy-manager-ganz-abschalten-externer-nginx) |
|
||||
| `NPM_ADMIN_PORT` | Port der Proxy-Manager-Oberfläche (Vorgabe 81) – nur über `npm-port` bzw. das Menü ändern |
|
||||
| `NPM_API_HOST` | Name für die Schnittstelle (`127.0.0.1` oder `localhost`) – siehe [Kapitel 14.6](#146-netze-mit-zwangsproxy-api-fehler-der-keiner-ist) |
|
||||
| `NPM_IP_RANGES_FETCH` | IP-Bereiche von AWS/Cloudflare holen (Vorgabe `false`) – siehe [Kapitel 10.1.2](#1012-der-dienst-stürzt-in-einer-schleife-ab) |
|
||||
| `NPM_ADMIN_URL` | Startseite des Terminal-Browsers; leer = automatisch aus `NPM_ADMIN_PORT` |
|
||||
| `BACKUP_DIR` | Ablage für **manuelle** Backups (Vorgabe `./backups`); geplante Jobs haben eigene Pfade |
|
||||
| `BACKUP_AUTO` | `on`/`off` – sollen die Backup-Jobs per cron laufen? |
|
||||
@@ -1254,6 +1255,62 @@ man erkennt, wer da geantwortet hat:
|
||||
<html><head><title>502 Proxy Error</title></head>...
|
||||
```
|
||||
|
||||
### 10.1.2 Der Dienst stürzt in einer Schleife ab
|
||||
|
||||
Sieht das Protokoll des Containers so aus, ist der `502` erklärt:
|
||||
|
||||
```
|
||||
[IP Ranges] › info Fetching https://ip-ranges.amazonaws.com/ip-ranges.json
|
||||
Uncaught Error: Client network socket disconnected before secure TLS connection was established
|
||||
at TLSSocket.emit (node:events:497:7)
|
||||
... node --abort_on_uncaught_exception ... index.js
|
||||
❯ Starting backend ...
|
||||
[und das immer wieder]
|
||||
```
|
||||
|
||||
Der Proxy Manager holt beim Start IP-Bereiche von AWS und Cloudflare –
|
||||
gebraucht wird das **nur** für Zugriffslisten mit deren Adressbereichen, in
|
||||
einem internen Netz also nie. Der Code fängt Fehler dabei ab, aber dieser
|
||||
kommt asynchron vom TLS-Socket und läuft am `catch` vorbei. Weil node mit
|
||||
`--abort_on_uncaught_exception` läuft, bricht der Prozess ab, s6 startet ihn
|
||||
neu – und nginx davor antwortet die ganze Zeit mit `502`.
|
||||
|
||||
Ausgelöst wird das von Netzen, die die Verbindung **annehmen und dann kappen**
|
||||
(aufbrechende Proxys, Firewalls). Scheitert der Abruf sauber – DNS-Fehler,
|
||||
Verbindung abgelehnt –, passiert nichts; der Dienst läuft weiter.
|
||||
|
||||
Abhilfe:
|
||||
|
||||
```bash
|
||||
./scripts/cmk-manage.sh config set NPM_IP_RANGES_FETCH false
|
||||
./scripts/cmk-manage.sh up
|
||||
```
|
||||
|
||||
Im Protokoll steht dann `IP Ranges fetch is disabled by environment variable`.
|
||||
**Vorgabe in diesem Projekt ist `false`** – der Abruf bringt einem internen
|
||||
Monitoring-Server nichts und kann ihn lahmlegen.
|
||||
|
||||
> Ein Rest bleibt: `initTimer()` läuft unabhängig vom Schalter und versucht es
|
||||
> **alle sechs Stunden** erneut. Soll auch das ausgeschlossen sein, zeigen die
|
||||
> Namen ins Leere – dann scheitert der Abruf sauber und wird abgefangen:
|
||||
>
|
||||
> ```yaml
|
||||
> extra_hosts:
|
||||
> - "ip-ranges.amazonaws.com:127.0.0.1"
|
||||
> - "www.cloudflare.com:127.0.0.1"
|
||||
> ```
|
||||
|
||||
Die Fehlermeldung erkennt den Fall übrigens selbst – sie zählt Startversuche
|
||||
und Ausnahmen im Containerprotokoll:
|
||||
|
||||
```
|
||||
Der Dienst startet nicht nur - er stuerzt in einer Schleife ab.
|
||||
Im Protokoll: 4 Startversuche, 4 unbehandelte Ausnahmen.
|
||||
Die Ausnahmen kommen vom Abruf der IP-Bereiche bei AWS und
|
||||
Cloudflare. ... Abschalten:
|
||||
cmk-manage.sh config set NPM_IP_RANGES_FETCH false
|
||||
```
|
||||
|
||||
### 10.2 Proxy-Host anlegen – ohne Browser
|
||||
|
||||
Die Weboberfläche lässt sich im Terminal-Browser nur mühsam bedienen; Formulare
|
||||
|
||||
Reference in New Issue
Block a user