2
Reverse Proxy
SPP User edited this page 2026-11-01 22:12:42 +01:00

Reverse-Proxy

Die Webseite lässt sich hinter einen Reverse-Proxy wie nginx, Caddy oder Traefik stellen, etwa um sie per HTTPS unter einer eigenen Adresse anzubieten.

  • Eigene (Sub-)Domain, kein Unterpfad. Die Anwendung nutzt absolute Pfade (/api, /socket.io, /stream, /admin). Unter einem Unterpfad wie example.de/veto/ funktioniert sie nicht. Nimm eine eigene Subdomain, z. B. veto.example.de.
  • WebSockets durchreichen. Die Live-Updates laufen über Socket.IO. Der Proxy muss den Upgrade-Header weitergeben, sonst bleibt die Seite bei „Verbinde mit Lobby“ hängen.
  • .env anpassen:
    • PUBLIC_URL=https://veto.example.de, damit Einladungs- und Stream-Links stimmen
    • TRUST_PROXY=true, damit die Begrenzung der Anmeldeversuche die echte Client-IP sieht und nicht die des Proxys
  • Nicht über den Proxy:
    • Die CS2-Spielverbindungen laufen per UDP direkt zum Docker-Host. Für Spieler aus dem Internet braucht es dort Portfreigaben und einen GSLT (CS2_GSLT).
    • Die Logs der CS2-Server können weiter über das LAN kommen. LOG_RECEIVER_URL bleibt dann z. B. http://192.168.178.31:3000.
  • Vor dem Freigeben absichern: Öffentlich erreichbar sind dann auch /admin und, ohne Schlüssel, Stream-Übersicht und Beamer-Diashow. Setze ein starkes ADMIN_PASSWORD und einen STREAM_KEY. Organisatoren bekommen nur einen Schlüssel für ihr eigenes Match, nicht den globalen.
  • Datenschutz: Die Seite setzt keine Cookies und lädt nichts von fremden Servern, auch die Schriften liefert sie selbst aus. Ein Cookie-Banner braucht es nicht. Öffentlich erreichbar braucht sie aber Impressum und Datenschutzerklärung, z. B. als Link auf die von maxlan.de. Siehe Sicherheit.

Beispiel für nginx:

server {
    listen 443 ssl http2;
    server_name veto.example.de;

    ssl_certificate     /etc/letsencrypt/live/veto.example.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/veto.example.de/privkey.pem;

    location / {
        proxy_pass http://192.168.178.31:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 1h;
    }
}

Ein 502 Bad Gateway vom Proxy heißt, dass er die Anwendung unter proxy_pass nicht erreicht: Sie läuft nicht, oder Adresse bzw. Port stimmen nicht.