docs: der NPM-Block zum Einfuegen, und ein Skript, das sagt ob er sitzt
docs/npm-advanced.conf enthaelt genau das, was in NPM unter Advanced ->
Custom Nginx Configuration gehoert: die drei ^~-Bloecke fuer /f/, /t/ und
/api/, samt Begruendung als Kommentar. Die ganze Datei ist einfuegbar --
nginx kennt '#'. Syntax gegengeprueft mit `nginx -t` in einem
Wegwerf-Container, und zwar mit DIESEM Dateiinhalt und nicht mit einer
abgetippten Kurzfassung.
/s/ steht bewusst NICHT drin: die Schluessel bestehen aus einem festen
Alphabet ohne Punkt, eine Freigabe-Adresse endet also nie auf eine
Bildendung und faellt gar nicht erst in die assets.conf-Regel. /assets/
ebenfalls nicht -- die Dateinamen der gebauten Oberflaeche tragen einen Hash
und aendern sich nie unter demselben Namen, dort ist der Zwischenspeicher
richtig.
tools/proxy-pruefen.ps1 misst danach, ob es gewirkt hat, und sagt sonst, was
zu tun ist. Beim Schreiben hat es gleich eine SCHWAECHE IN SICH SELBST
gezeigt: die erste Fassung prueft "/api/ ohne Token -> 401" und meldete
Erfolg -- der 401 war aber nur ein zwischengespeicherter, den der Proxy an
alle ausliefert. Gemessen bekam ihn sogar ein Aufrufer MIT gueltigem Token.
Verlaesslich ist nur das Paar auf einer FRISCHEN, zufaelligen Adresse:
GET /api/exists/probe-xyz.webp mit Token -> 200
GET /api/exists/probe-xyz.webp ohne Token -> 401 gut
-> 200 Block fehlt
Aktueller Stand, gemessen:
[ok] /f/ Cache-Control public, max-age=300
[!!] /t/ Cache-Control max-age=10608
[ok] /api/ mit Token -> 200 HTTP 200
[!!] /api/ dieselbe Adresse ohne Token HTTP 200 -- der Proxy gibt sie weiter
[ok] /api/exists?pfad ohne Token -> 401 HTTP 401
Die letzte Zeile ist der Grund, warum die Abfrageform gebaut wurde: sie ist
dicht, ohne von dieser Proxy-Einstellung abzuhaengen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
# d4rk_media — der Block fuer Nginx Proxy Manager
|
||||
#
|
||||
# WOHIN: NPM oeffnen -> Hosts -> Proxy Hosts -> fivemanage.d4rkst3r.de
|
||||
# -> Edit -> Reiter "Advanced" -> Feld "Custom Nginx Configuration"
|
||||
#
|
||||
# WAS: den GESAMTEN Inhalt dieser Datei dort hineinkopieren. Was schon drin
|
||||
# steht (der /f/-Block), ist unten enthalten -- also ersetzen, nicht
|
||||
# anhaengen.
|
||||
#
|
||||
# DANACH: "Save" druecken. ERST DANN schreibt NPM seine Datei
|
||||
# /data/nginx/proxy_host/9.conf neu und laedt nginx nach. Ohne Save
|
||||
# passiert nichts, und das ist die wahrscheinlichste Erklaerung dafuer,
|
||||
# dass der Block beim letzten Mal nicht angekommen ist.
|
||||
#
|
||||
# Die Kommentarzeilen duerfen mit hinein -- nginx kennt '#'. Die Syntax ist
|
||||
# gegengeprueft: `nginx -t` in einem Wegwerf-Container, "syntax is ok".
|
||||
#
|
||||
# ----------------------------------------------------------------------------
|
||||
# WARUM DAS UEBERHAUPT NOETIG IST
|
||||
#
|
||||
# NPM bindet in jeden Proxy-Host eine assets.conf ein. Deren Regel greift auf
|
||||
# JEDE Adresse, die auf eine Bild- oder Skriptendung endet:
|
||||
#
|
||||
# location ~* ^.*\.(css|js|jpe?g|gif|png|webp|woff|...)$ {
|
||||
# proxy_cache public-cache;
|
||||
# proxy_cache_key $host$request_uri; <- der Token zaehlt NICHT mit
|
||||
# proxy_ignore_headers Set-Cookie Cache-Control Expires ...;
|
||||
# proxy_cache_valid any 30m;
|
||||
# proxy_hide_header Cache-Control;
|
||||
# proxy_hide_header Vary;
|
||||
# }
|
||||
#
|
||||
# Drei gemessene Folgen davon:
|
||||
#
|
||||
# 1. /api/exists/vehicles/adder.webp endet auf ".webp" und faellt hinein. Der
|
||||
# Proxy legt die BERECHTIGTE Antwort weg und liefert sie danach an jeden
|
||||
# aus -- nachgemessen: 200 mit voller Auskunft, ganz ohne Token. Und
|
||||
# andersherum: landet zuerst ein 401 im Speicher, bekommen ihn 30 Minuten
|
||||
# lang alle, auch mit gueltigem Token.
|
||||
#
|
||||
# 2. /t/… (die Vorschaubilder) tragen dadurch "Cache-Control: max-age=12799"
|
||||
# statt unserer "public, max-age=60". Nach einem erneuten Upload zeigt die
|
||||
# Galerie deshalb stundenlang die ALTE Vorschau.
|
||||
#
|
||||
# 3. "proxy_hide_header Vary" wuerde unser "Vary: Accept" wegwerfen. Daran
|
||||
# haengt die WebP-Auslieferung: ohne die Zeile bekaeme ein Aufrufer, der
|
||||
# kein WebP versteht, die WebP-Fassung aus dem Zwischenspeicher.
|
||||
#
|
||||
# NACHGEMESSEN AM LAUFENDEN DIENST, damit klar ist, dass das kein
|
||||
# theoretisches Problem ist -- dieselbe Adresse, dreimal:
|
||||
#
|
||||
# GET /api/exists/probe-xyz.webp mit gueltigem Token -> 200
|
||||
# GET /api/exists/probe-xyz.webp OHNE Token -> 200 (!)
|
||||
# GET /api/exists/vehicles/adder.webp mit gueltigem Token -> 401 (!)
|
||||
#
|
||||
# Die zweite Zeile ist die Auskunft ohne Berechtigung. Die dritte ist derselbe
|
||||
# Fehler andersherum: dort lag ein 401 im Speicher, und den bekam auch, wer
|
||||
# einen gueltigen Token hatte.
|
||||
#
|
||||
# Das "^~" ist der ganze Trick: eine gewoehnliche Praefix-Location VERLIERT
|
||||
# gegen eine Regex-Location. Mit "^~" gewinnt sie und die Regex kommt gar nicht
|
||||
# mehr zum Zuge. In einem Wegwerf-nginx nachgemessen.
|
||||
#
|
||||
# NICHT ausgenommen wird /assets/ -- die gebaute Oberflaeche. Deren Dateinamen
|
||||
# tragen einen Hash (index-DCMjxAfP.js), aendern sich also nie unter demselben
|
||||
# Namen. Dort ist der Zwischenspeicher genau richtig.
|
||||
# ----------------------------------------------------------------------------
|
||||
# AB HIER IST ES KONFIGURATION.
|
||||
|
||||
|
||||
# Die Dateien selbst. Sie koennen sich unter derselben Adresse aendern (ein
|
||||
# neu aufgenommenes Fahrzeugbild ersetzt das alte), und sie tragen "Vary:
|
||||
# Accept" fuer die sparsame WebP-Fassung.
|
||||
location ^~ /f/ {
|
||||
proxy_cache off;
|
||||
include conf.d/include/proxy.conf;
|
||||
}
|
||||
|
||||
# Die Vorschaubilder. Aendern sich, sobald ein Bild neu hochgeladen wird --
|
||||
# und dann soll das Dashboard es sehen und nicht in vier Stunden.
|
||||
location ^~ /t/ {
|
||||
proxy_cache off;
|
||||
include conf.d/include/proxy.conf;
|
||||
}
|
||||
|
||||
# Die API. Hier haengt eine Zugangspruefung dran, und eine zwischengespeicherte
|
||||
# Antwort kennt den Token nicht, der sie erlaubt hat.
|
||||
location ^~ /api/ {
|
||||
proxy_cache off;
|
||||
include conf.d/include/proxy.conf;
|
||||
}
|
||||
Reference in New Issue
Block a user