# GerbilManager — Vhost fuer die oeffentliche Webseite (WEB-2) # =========================================================== # Einzufuegen in den bestehenden nginx-Reverse-Proxy (TrueNAS-App "ix-webserver"): # Datei ablegen unter: /mnt/JailStorage/DockerVolumes/nginx/config/gerbil-public.conf # (das ist der conf.d-Mount des Proxys; dort liegen auch git/cloud/rismer.de) # Danach: docker exec ix-webserver-webserver-1 nginx -s reload # # WICHTIG (containerisierter Proxy): das Backend MUSS ueber die Host-LAN-IP # angesprochen werden (192.168.2.115), NICHT 127.0.0.1 — 127.0.0.1 waere im # Proxy-Container er selbst. Der publicsite-Container veroeffentlicht Port 8081 # auf dem Host (PUBLICSITE_PORT in deploy/truenas/.env). # # SICHERHEIT: Dieser Vhost zeigt NUR auf den publicsite-Container (statische # oeffentliche Seite). Der Manager (API + Frontend) bleibt LAN-only und ist von # aussen NICHT erreichbar (keine Authentifizierung). # # ersetzen (z. B. rennmaus.rismer.de). DNS-Eintrag auf die oeffentliche # IP + Router-Weiterleitung 80/443 -> 11080/11443 muss wie bei den anderen # rismer.de-Subdomains vorhanden sein. # HTTP: ACME-Challenge zulassen + auf HTTPS umleiten (Muster der anderen Vhosts) server { listen 80; listen [::]:80; server_name ; location /.well-known/acme-challenge/ { root /usr/share/nginx/letsencrypt; } location / { return 301 https://$host$request_uri; } } # HTTPS: Reverse-Proxy auf den publicsite-Container (Host-Port 8081) server { listen 443 ssl; listen [::]:443 ssl; server_name ; # Let's Encrypt (gleicher Cert-Store wie die uebrigen rismer.de-Vhosts). # Zertifikat anfordern, z. B.: # docker exec ix-webserver-webserver-1 certbot --nginx -d # oder webroot: certbot certonly --webroot -w /usr/share/nginx/letsencrypt -d ssl_certificate /etc/letsencrypt/live//fullchain.pem; ssl_certificate_key /etc/letsencrypt/live//privkey.pem; # HSTS gehoert auf die TLS-terminierende Ebene (hier), nicht in den HTTP-only # publicsite-Container. Erst aktivieren, wenn HTTPS sicher steht (max-age dann ggf. erhoehen). add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # Die uebrigen Security-Header (CSP, X-Content-Type-Options, X-Frame-Options, # Referrer-Policy, Permissions-Policy) liefert der publicsite-nginx bereits mit und # werden vom Proxy durchgereicht (siehe nginx/publicsite.conf). location / { proxy_pass http://192.168.2.115:8081; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_buffering off; # kleine statische HTML-Seiten } }