Proxy-Host bearbeiten, ohne den Rest zu verlieren
Aendern ging bisher nur ueber "proxy add --update", und das schreibt den
Eintrag vollstaendig neu: wer den Port aendern wollte, verlor still die
zusaetzlichen Pfade und die erweiterte Konfiguration, weil die Nutzlast
aus Vorgaben zusammengesetzt wird.
Die Schnittstelle des Proxy Managers arbeitet als Patch - ein PUT mit
nur einem Feld aendert auch nur dieses; an einem laufenden NPM 2.15.1
nachgemessen. Darauf setzt "proxy edit" auf: angegeben wird, was sich
aendern soll, alles Uebrige bleibt unberuehrt.
proxy edit --id 3 --forward-port 5001
proxy edit --domain checkmk.example.local --cert self
proxy edit --id 3 --location /grafana=127.0.0.1:3000
proxy edit --id 3 --del-location /grafana
Dazu Ziel, Schema, Name, Zertifikat, erweiterte Konfiguration, die vier
Schalter und ein/aus. Ohne Angabe wird nur der Stand gezeigt. In der
Oberflaeche liegt dasselbe unter "Proxy-Host bearbeiten", mit den
aktuellen Werten vorbelegt.
Pfade kennt die Schnittstelle nur als Ganzes, sie werden deshalb gelesen,
geaendert und zurueckgeschrieben. Das an "}" aufzuteilen geht nicht:
"advanced_config" darf nginx-Bloecke mit geschweiften Klammern und
maskierte Anfuehrungszeichen enthalten. Dafuer gibt es jetzt json_raw
und json_split_array, die die Verschachtelung mitzaehlen und
Zeichenketten erkennen. "proxy show" liest die Pfade ebenfalls darueber.
Zwei Fehler kamen dabei ans Licht:
- NPM_CODE wurde in npm_api gesetzt, aber npm_api wird fast immer in
einer Kommandoersetzung aufgerufen - also in einer Subshell. Der
HTTP-Code kam nie beim Aufrufer an; unter "set -u" brach das Skript
im Fehlerpfad sogar ab, statt den Fehler zu zeigen. Betraf auch
"proxy add" und das Anlegen von Zertifikaten. Der Code wird jetzt
zusaetzlich abgelegt und mit npm_code gelesen.
- Der Proxy Manager schaltet ohne Zertifikat http2_support und
ssl_forced von sich aus ab. Das blieb unbemerkt; jetzt wird nach dem
Schreiben verglichen und eine Abweichung gemeldet.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1224,6 +1224,7 @@ erzwingen, HTTP/2 und Websockets einschalten und den empfohlenen
|
||||
| `proxy add …` | Proxy-Host anlegen (`--update` ersetzt einen vorhandenen) |
|
||||
| `proxy show --domain X` | Einzelheiten samt zusätzlicher Pfade |
|
||||
| `proxy del --id N` | Proxy-Host löschen |
|
||||
| `proxy edit --id N …` | vorhandenen Proxy-Host ändern – nur die angegebenen Felder |
|
||||
| `proxy default --domain X` | HTTPS über die blanke IP ermöglichen (spiegelt X in einen Standard-Server) |
|
||||
| `proxy default --off` | diese Spiegelung wieder entfernen |
|
||||
|
||||
@@ -1523,6 +1524,55 @@ Die saubere Alternative bleibt ein Name: ein DNS-Eintrag oder eine Zeile in der
|
||||
`hosts`-Datei der Clients genügt, damit der Browser SNI sendet und der
|
||||
Proxy-Host ganz normal greift.
|
||||
|
||||
### 10.9 Einen Proxy-Host ändern
|
||||
|
||||
`proxy add --update` schreibt den Eintrag **vollständig** neu – wer damit nur
|
||||
den Port ändern will, verliert unbeabsichtigt die Pfade und die erweiterte
|
||||
Konfiguration. Dafür gibt es `proxy edit`: angegeben wird nur, was sich ändern
|
||||
soll, alles Übrige bleibt unangetastet.
|
||||
|
||||
```bash
|
||||
./scripts/cmk-manage.sh proxy edit --id 3 --forward-port 5001
|
||||
./scripts/cmk-manage.sh proxy edit --domain checkmk.example.local --cert self
|
||||
./scripts/cmk-manage.sh proxy edit --id 3 --location /grafana=127.0.0.1:3000
|
||||
./scripts/cmk-manage.sh proxy edit --id 3 --del-location /grafana
|
||||
./scripts/cmk-manage.sh proxy edit --id 3 # nur ansehen
|
||||
```
|
||||
|
||||
Der Eintrag wird über `--id` oder `--domain` gewählt.
|
||||
|
||||
| Option | Ändert |
|
||||
|---|---|
|
||||
| `--rename NAME` | den Domainnamen |
|
||||
| `--forward-host HOST`, `--forward-port PORT` | das Weiterleitungsziel |
|
||||
| `--scheme http\|https` | wie der Proxy das Ziel anspricht |
|
||||
| `--cert self\|letsencrypt\|none\|ID` | das Zertifikat |
|
||||
| `--advanced 'TEXT'` | die erweiterte nginx-Konfiguration (`\n` trennt Zeilen) |
|
||||
| `--force-ssl`, `--http2`, `--websockets`, `--block-exploits` | jeweils `on`/`off` |
|
||||
| `--enable`, `--disable` | den Eintrag ein- oder ausschalten |
|
||||
| `--location /pfad=host:port` | einen Pfad hinzufügen oder ersetzen |
|
||||
| `--del-location /pfad` | einen Pfad entfernen |
|
||||
|
||||
Zwei Dinge sind dabei zu wissen:
|
||||
|
||||
- **Pfade** kennt die Schnittstelle nur als Ganzes. `--location` und
|
||||
`--del-location` lesen deshalb den Bestand, ändern den einen Eintrag und
|
||||
schreiben die Liste zurück. Hatte ein ersetzter Pfad eine eigene erweiterte
|
||||
Konfiguration, wird das vorher gesagt.
|
||||
- Der Proxy Manager **biegt manches still zurecht**: ohne Zertifikat schaltet
|
||||
er `http2_support` und `ssl_forced` von sich aus ab. `proxy edit` vergleicht
|
||||
danach, was gespeichert wurde, und meldet eine Abweichung – sonst sucht man
|
||||
den Fehler später an der falschen Stelle.
|
||||
|
||||
In der Oberfläche liegt dasselbe unter **Proxy-Hosts → Proxy-Host bearbeiten**;
|
||||
dort sind die Felder mit den aktuellen Werten vorbelegt, und die Schalter
|
||||
stehen als Auswahlliste bereit.
|
||||
|
||||
> Wurde der Standard-Server für den IP-Zugang eingerichtet
|
||||
> ([Kapitel 10.8](#108-https-über-die-blanke-ip)), spiegelt er einen Stand von
|
||||
> vorher. Nach inhaltlichen Änderungen neu schreiben – `proxy edit` erinnert
|
||||
> daran.
|
||||
|
||||
---
|
||||
|
||||
## 11. Proxy Manager lokal einrichten (Terminal-Browser)
|
||||
|
||||
Reference in New Issue
Block a user