# d4rk_media — der Block fuer Nginx Proxy Manager # # WOHIN: NPM oeffnen -> Hosts -> Proxy Hosts -> media.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; }