docs: der Proxy-Block sitzt -- gemessen, nicht geglaubt

Eingetragen und gespeichert. tools/proxy-pruefen.ps1 sagt jetzt fuenf von
fuenf:

    [ok]  /f/  Cache-Control                        public, max-age=300
    [ok]  /t/  Cache-Control                        public, max-age=60
    [ok]  /api/ mit Token -> 200                    HTTP 200
    [ok]  /api/ dieselbe Adresse ohne Token -> 401  HTTP 401
    [ok]  /api/exists?pfad ohne Token -> 401        HTTP 401

Und die Folgen, die daran hingen, einzeln gegengeprueft:

    /api/exists/…webp ohne Token     200 mit voller Auskunft  ->  401
    dieselbe Adresse MIT Token       401 (zwischengespeichert) ->  200
    Vorschau nach erneutem Upload    bis zu 4 h alt            ->  max-age=60
    Vary auf /f/                     wurde entfernt            ->  vary: Accept

Die WebP-Aushandlung am selben Bild: ohne Accept image/png mit 12295 B, mit
Accept: image/webp dann image/webp mit 2270 B. Gleiche Adresse, 82 Prozent
weniger -- das ging vorher nur deshalb, weil /f/ als einziger Pfad schon
ausgenommen war.

Was bleibt: /api/exists?pfad=… ist weiterhin die empfohlene Form. Sie ist
dicht, OHNE von dieser Proxy-Einstellung abzuhaengen -- eine Zugangspruefung,
die an einer Zeile in einer fremden Oberflaeche haengt, ist keine. Der Fall hat
gerade gezeigt, wie schnell so eine Zeile fehlt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-11 23:41:51 +02:00
co-authored by Claude Opus 5
parent 914f2fb854
commit 7877c0f7b9
+30 -27
View File
@@ -479,36 +479,39 @@ Portainer also `Compose path: docker-compose.yml`). Gelöscht: drei Volumes und
drei Abbilder, rund **670 MB**. Nachgezählt war vorher, dass kein einziges Bild
darin lag.
**Was noch bei dir liegt** — an NPM komme ich ohne Zugang nicht.
**Der Proxy ist erledigt.** `docs/npm-advanced.conf` ist eingetragen und
gespeichert; `tools/proxy-pruefen.ps1` misst nach, statt vermuten zu lassen:
> **Fertig zum Einfügen:** `docs/npm-advanced.conf`. Den ganzen Inhalt in
> NPM → Proxy-Host → *Advanced* → *Custom Nginx Configuration*, dann **Save**
> (erst das schreibt `9.conf` neu — die wahrscheinlichste Erklärung dafür, dass
> es beim ersten Anlauf nicht ankam). Danach:
>
> ```powershell
> pwsh -File tools\proxy-pruefen.ps1 -Token d4rk_...
> ```
>
> Das misst und sagt es, statt es vermuten zu lassen. Die Syntax der Datei ist
> mit `nginx -t` in einem Wegwerf-Container gegengeprüft.
Nachgemessen am 11.08.2026, nicht vermutet:
| Pfad | gemessene `Cache-Control` | heißt |
|---|---|---|
| `/f/…` | `public, max-age=300` (unsere) | Block sitzt ✅ |
| `/t/…` | `max-age=17293` (NPMs) | **Block fehlt** ⬜ |
Also noch einzutragen:
```nginx
location ^~ /t/ { proxy_cache off; include conf.d/include/proxy.conf; }
```
[ok] /f/ Cache-Control public, max-age=300
[ok] /t/ Cache-Control public, max-age=60
[ok] /api/ mit Token -> 200 HTTP 200
[ok] /api/ dieselbe Adresse ohne Token -> 401 HTTP 401
[ok] /api/exists?pfad ohne Token -> 401 HTTP 401
```
Ohne ihn zeigt die Galerie nach einem erneuten Upload **stundenlang die alte
Vorschau** — die Datei selbst ist längst neu, nur das Kachelbild nicht. Kein
Datenverlust, aber genau die Sorte Abweichung, die man dem Dienst anlastet.
Und die drei Folgen, die daran hingen, gegengeprüft:
| | vorher | jetzt |
|---|---|---|
| `/api/exists/…webp` **ohne** Token | `200` mit voller Auskunft | `401` |
| dieselbe Adresse **mit** gültigem Token | `401` (zwischengespeichert) | `200` |
| Vorschau nach erneutem Upload | bis zu 4 h alt | `max-age=60` |
| WebP-Aushandlung auf `/f/` | `Vary` wurde entfernt | `vary: Accept` steht |
Die WebP-Aushandlung am selben Bild nachgemessen: ohne `Accept` kommen
`image/png` mit 12 295 B, mit `Accept: image/webp` kommen `image/webp` mit
2 270 B — **82 % weniger, gleiche Adresse.**
> Was die Sache gelehrt hat, steht in `docs/npm-advanced.conf` als Kommentar:
> `assets.conf` greift nach der **Endung** der Adresse, nicht nach ihrer
> Bedeutung. Alles, was auf `.webp`, `.png`, `.js` endet, fällt hinein — auch
> eine API-Antwort. Und `proxy_cache_key` kennt den `Authorization`-Kopf nicht,
> also wird dieselbe Antwort an alle ausgeliefert, in beide Richtungen.
>
> Deshalb bleibt `/api/exists?pfad=…` die empfohlene Form: sie ist dicht, **ohne**
> von dieser Proxy-Einstellung abzuhängen. Eine Zugangsprüfung, die an einer
> Zeile in einer fremden Oberfläche hängt, ist keine.
Außerdem: den Proxy-Host `fivecdn.d4rkst3r.de` löschen — er zeigt auf den toten
Port 9100 und gibt 502.