# Vaultnord brand-proxy # # Ligger mellom Traefik og kundenes hvelv, og syr inn vår egen CSS, favicon og # en bunntekst med kildekodelenker - uten å røre Vaultwarden-imaget. # # Poenget er at oppgradering av hvelvene skal være å bytte en image-tag, ikke å # bygge en patchet web-vault på nytt. Alt vi legger til, legges til her. map $http_upgrade $connection_upgrade { default upgrade; '' close; } # Første ledd i vertsnavnet er kundens slug: ethica.vaultnord.no -> ethica map $host $tenant { default ""; "~^(?[a-z0-9-]+)\." $slug; } server { listen 80; server_name _; # Vedlegg kan være store. Cloudflare stopper uansett på 100 MB i gratisplanen. client_max_body_size 128m; # Docker sin interne DNS. Uten resolver kan vi ikke slå opp vw- # dynamisk, og nginx ville nektet å starte om en tenant var nede. resolver 127.0.0.11 valid=10s ipv6=off; location = /_vaultnord/health { access_log off; return 200 "ok\n"; } location /_vaultnord/ { alias /brand/; expires 1h; add_header Cache-Control "public"; } location / { if ($tenant = "") { return 404; } proxy_pass http://vw-$tenant$request_uri; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header CF-Connecting-IP $http_cf_connecting_ip; # Live-synk mellom klientene går over websocket. proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 3600s; # sub_filter kan ikke røre en komprimert kropp. Vi ber om ukomprimert # fra hvelvet; Cloudflare komprimerer uansett ut mot brukeren. proxy_set_header Accept-Encoding ""; sub_filter_once on; sub_filter_types text/html; sub_filter '' ''; sub_filter '' ''; } }