# Sitzt der NPM-Block? Eine Antwort, keine Vermutung. # # pwsh -File tools\proxy-pruefen.ps1 # # Nach dem Einfuegen von docs\npm-advanced.conf und "Save" in NPM ausfuehren. # Das Skript AENDERT NICHTS -- es misst nur, was ueber die Leitung kommt. # # WARUM ES DAS GIBT: der Block wurde schon einmal fuer eingefuegt gehalten und # war es nicht. Die Kopfzeile sagt es eindeutig, aber man muss sie eben ansehen. param( [string]$Basis = 'https://media.d4rkst3r.de', # Fuer die API-Messung. Ohne ihn wird sie uebersprungen -- sie braucht einen # gueltigen Token, um "mit" und "ohne" unterscheiden zu koennen. [string]$Token = '' ) $ErrorActionPreference = 'Continue' $fehler = 0 function Kopf([string]$url, [hashtable]$header = @{}) { try { $a = Invoke-WebRequest -Uri $url -Method Head -Headers $header -SkipHttpErrorCheck ` -MaximumRedirection 0 -ErrorAction Stop return @{ code = [int]$a.StatusCode; kopf = $a.Headers } } catch { return @{ code = 0; kopf = @{}; fehler = $_.Exception.Message } } } function Wert($kopf, [string]$name) { foreach ($k in $kopf.Keys) { if ($k -ieq $name) { return ($kopf[$k] -join ', ') } } return '' } function Zeile([string]$was, [bool]$gut, [string]$gemessen) { $zeichen = if ($gut) { ' [ok] ' } else { ' [!!] ' } $farbe = if ($gut) { 'Green' } else { 'Red' } Write-Host ($zeichen + $was.PadRight(42) + $gemessen) -ForegroundColor $farbe if (-not $gut) { $script:fehler++ } } Write-Host '' Write-Host "Messe $Basis" -ForegroundColor Cyan Write-Host '' # -- 1. Die Dateien ------------------------------------------------------------ # # Unsere Vorgabe ist "public, max-age=300". Kommt etwas anderes an, hat # assets.conf sie ueberschrieben -- dann fehlt der Block. $f = Kopf "$Basis/f/vehicles/adder.webp" $cc = Wert $f.kopf 'Cache-Control' Zeile '/f/ Cache-Control' ($cc -match 'max-age=300') $(if ($cc) { $cc } else { '(keine)' }) # -- 2. Die Vorschaubilder ----------------------------------------------------- $t = Kopf "$Basis/t/vehicles/adder.webp" $cc = Wert $t.kopf 'Cache-Control' Zeile '/t/ Cache-Control' ($cc -match 'max-age=60\b') $(if ($cc) { $cc } else { '(keine)' }) # -- 3. Die API, und das ist die entscheidende --------------------------------- # # EIN EINZELNER AUFRUF TAUGT HIER NICHT, und das ist beim Schreiben dieses # Skripts aufgefallen: "ohne Token -> 401" sah nach Erfolg aus, war aber nur # ein zwischengespeicherter 401, den der Proxy an ALLE ausliefert -- gemessen # gab er ihn sogar Aufrufern MIT gueltigem Token. # # Verlaesslich ist nur das Paar auf einer FRISCHEN Adresse, die noch in keinem # Zwischenspeicher liegt: # # mit Token -> 200 (der Dienst antwortet) # ohne Token -> 401 (der Proxy hat NICHT weggelegt) <- gut # ohne Token -> 200 (er hat weggelegt) <- Block fehlt # # Die Adresse endet auf ".webp", damit sie ueberhaupt in die assets.conf-Regel # faellt -- ohne diese Endung wuerde die Messung nichts messen. if (-not $Token) { Write-Host ' [--] /api/ (uebersprungen) kein -Token uebergeben' -ForegroundColor DarkGray Write-Host ' Dashboard -> Token -> einen anlegen, dann:' -ForegroundColor DarkGray Write-Host ' pwsh -File tools\proxy-pruefen.ps1 -Token d4rk_...' -ForegroundColor DarkGray } else { $zufall = -join ((1..12) | ForEach-Object { 'abcdefghijklmnopqrstuvwxyz0123456789'[(Get-Random -Max 36)] }) $probe = "$Basis/api/exists/probe-$zufall.webp" $mit = Kopf $probe @{ Authorization = "Bearer $Token" } Zeile '/api/ mit Token -> 200' ($mit.code -eq 200) "HTTP $($mit.code)" $ohne = Kopf $probe Zeile '/api/ dieselbe Adresse ohne Token -> 401' ($ohne.code -eq 401) ` $(if ($ohne.code -eq 200) { 'HTTP 200 — der Proxy gibt sie weiter!' } else { "HTTP $($ohne.code)" }) } # Die Abfrageform ist von sich aus dicht -- sie muss auch OHNE den Block 401 # geben. Faellt SIE durch, stimmt etwas am Dienst und nicht am Proxy. $b = Kopf "$Basis/api/exists?pfad=vehicles/adder.webp" Zeile '/api/exists?pfad ohne Token -> 401' ($b.code -eq 401) "HTTP $($b.code)" Write-Host '' if ($fehler -eq 0) { Write-Host ' Der Block sitzt. Nichts weiter zu tun.' -ForegroundColor Green } else { Write-Host " $fehler Messung(en) sagen: der Block ist NICHT wirksam." -ForegroundColor Red Write-Host '' Write-Host ' Naechste Schritte:' -ForegroundColor Yellow Write-Host ' 1. In NPM den Proxy-Host oeffnen -> Advanced -> Inhalt von' Write-Host ' docs\npm-advanced.conf einfuegen -> SAVE druecken.' Write-Host ' 2. Gegenpruefen, was NPM daraus gemacht hat:' Write-Host ' docker exec npm sh -c "grep -n ''location'' /data/nginx/proxy_host/9.conf"' Write-Host ' Stehen dort ^~ /f/, ^~ /t/ und ^~ /api/, ist gespeichert worden.' Write-Host ' 3. Dieses Skript erneut ausfuehren.' } Write-Host '' exit $(if ($fehler -eq 0) { 0 } else { 1 })