# 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).
#
# <DOMAIN> 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 <DOMAIN>;

    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 <DOMAIN>;

    # 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 <DOMAIN>
    # oder webroot:  certbot certonly --webroot -w /usr/share/nginx/letsencrypt -d <DOMAIN>
    ssl_certificate     /etc/letsencrypt/live/<DOMAIN>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<DOMAIN>/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
    }
}
