docs: Nginx Proxy Manager als erste Proxy-Variante
Die Werte, die in der Oberflaeche einzutragen sind, Feld fuer Feld - Details, SSL und Advanced. Steht vorn, weil es der Fall ist, der hier tatsaechlich laeuft. Drei Punkte, die man in der Oberflaeche nicht sieht und die sonst Zeit kosten: - Scheme ist http, nicht https. Die Anwendung beendet kein TLS. - HSTS bleibt in NPM aus - die Anwendung setzt den Kopf bereits selbst, sonst geht er zweimal raus. - Die vier proxy_set_header gehoeren NICHT ins Advanced-Feld. NPM setzt sie schon, und zwar im location-Block; ein zweiter Satz laege auf server-Ebene und wuerde ueberschrieben. Wer sie trotzdem eintraegt, sucht spaeter an der falschen Stelle. Ins Advanced-Feld gehoeren nur die Werte, die die Oberflaeche nicht abbildet: Uploadgroesse, Zeitgrenzen und das Abschalten der Pufferung fuer den Vollexport. Etappe: 8 Phase: Haertung
This commit is contained in:
@@ -420,6 +420,78 @@ docker compose ps # unter PORTS muss die neue Adresse stehen
|
|||||||
Das ist der Teil, den du auf dem **anderen** Server einträgst. Ersetz
|
Das ist der Teil, den du auf dem **anderen** Server einträgst. Ersetz
|
||||||
`10.0.0.5` durch die Adresse aus 7a.
|
`10.0.0.5` durch die Adresse aus 7a.
|
||||||
|
|
||||||
|
Vier Varianten, je nachdem was bei dir läuft: [Nginx Proxy Manager](#nginx-proxy-manager), [Caddy](#caddy), [nginx von Hand](#nginx) oder [Traefik](#traefik).
|
||||||
|
|
||||||
|
#### Nginx Proxy Manager
|
||||||
|
|
||||||
|
In der Oberfläche: **Hosts → Proxy Hosts → Add Proxy Host**.
|
||||||
|
|
||||||
|
**Reiter „Details"**
|
||||||
|
|
||||||
|
| Feld | Wert |
|
||||||
|
|---|---|
|
||||||
|
| Domain Names | `cockpit.deine-domain.de` |
|
||||||
|
| Scheme | `http` — nicht https. Die Anwendung beendet kein TLS |
|
||||||
|
| Forward Hostname / IP | die Adresse aus 7a, z. B. `10.0.0.5` |
|
||||||
|
| Forward Port | `3000` (oder dein `APP_PORT`) |
|
||||||
|
| Cache Assets | **aus** |
|
||||||
|
| Block Common Exploits | an |
|
||||||
|
| Websockets Support | an |
|
||||||
|
| Access List | leer lassen — die Anwendung hat eine eigene Anmeldung mit Pflicht-Zweitfaktor |
|
||||||
|
|
||||||
|
Zu **Cache Assets**: Next.js hängt an jede Skript- und Stildatei einen
|
||||||
|
Prüfsummen-Namen, ein Zwischenspeicher bringt hier also nichts. Aus bleibt
|
||||||
|
er, damit nach einem Update niemand rätselt, ob er noch eine alte Fassung
|
||||||
|
sieht.
|
||||||
|
|
||||||
|
**Reiter „SSL"**
|
||||||
|
|
||||||
|
| Feld | Wert |
|
||||||
|
|---|---|
|
||||||
|
| SSL Certificate | *Request a new SSL Certificate* (Let's Encrypt) |
|
||||||
|
| Force SSL | **an** |
|
||||||
|
| HTTP/2 Support | an |
|
||||||
|
| HSTS Enabled | **aus** |
|
||||||
|
| HSTS Subdomains | aus |
|
||||||
|
|
||||||
|
`HSTS Enabled` bleibt aus, weil die Anwendung den Kopf
|
||||||
|
`Strict-Transport-Security` bereits selbst setzt — sonst schickt der Server
|
||||||
|
ihn zweimal.
|
||||||
|
|
||||||
|
**Reiter „Advanced"**
|
||||||
|
|
||||||
|
Hier kommt der Teil hinein, den die Oberfläche nicht abbildet. Genau
|
||||||
|
dieser Block:
|
||||||
|
|
||||||
|
```nginx
|
||||||
|
# Fotos mehrseitiger Bescheide sind schnell 10 MB.
|
||||||
|
client_max_body_size 30M;
|
||||||
|
|
||||||
|
# Belegmappe, Rechnungslegung und Vollexport brauchen länger als die
|
||||||
|
# üblichen 60 Sekunden. Ohne diese Werte bricht der Download mittendrin ab.
|
||||||
|
proxy_connect_timeout 30s;
|
||||||
|
proxy_send_timeout 600s;
|
||||||
|
proxy_read_timeout 600s;
|
||||||
|
|
||||||
|
# Der Vollexport kommt als Strom. Puffert der Proxy, wartet der Browser,
|
||||||
|
# bis alles im Speicher des Proxys liegt - und läuft dabei in die Zeitgrenze.
|
||||||
|
proxy_buffering off;
|
||||||
|
proxy_request_buffering off;
|
||||||
|
```
|
||||||
|
|
||||||
|
Dann **Save**.
|
||||||
|
|
||||||
|
**Was du NICHT eintragen musst:** `proxy_set_header` für `Host`,
|
||||||
|
`X-Real-IP`, `X-Forwarded-For` und `X-Forwarded-Proto`. Nginx Proxy Manager
|
||||||
|
setzt diese vier bereits selbst, und zwar im `location`-Block — ein
|
||||||
|
zweiter Satz im Advanced-Feld läge auf `server`-Ebene und würde ohnehin
|
||||||
|
überschrieben. Trag sie nicht ein, sonst suchst du später an der falschen
|
||||||
|
Stelle.
|
||||||
|
|
||||||
|
**Wenn du eine `Access List` benutzt:** Sie sperrt auch `/api/wartung` aus.
|
||||||
|
Entweder du lässt sie weg, oder du trägst die IP des Servers ein, von dem
|
||||||
|
der cron-Eintrag aus Schritt 10 kommt.
|
||||||
|
|
||||||
#### Caddy
|
#### Caddy
|
||||||
|
|
||||||
```caddyfile
|
```caddyfile
|
||||||
|
|||||||
Reference in New Issue
Block a user