nginx Playground
(jvns.ca)<p>- Ein Playground, in dem sich nginx-Konfigurationen frei ändern und testen lassen <br />
→ `config`- sowie `curl`/`http`-Befehle eingeben und auf Run klicken, um sie auszuführen<br />
→ Zeigt das Ergebnis der ausgeführten Befehle sowie die nginx-Error-Logs an <br />
- Vue.js-Frontend + Go-Backend (offengelegt ist nur der Servercode als Gist)<br />
- Beim Klick auf den Run-Button führt das Go-Backend folgende Schritte aus <br />
→ Speichert die Konfigurationsdatei als temporäre Datei<br />
→ Erstellt einen neuen Network Namespace <br />
ip netns add $RANDOM_NAMESPACE_NAME<br />
→ Startet `go-httpbin` auf Port 777<br />
→ Startet nginx<br />
→ Wartet 100 ms, bis nginx korrekt läuft. Falls das fehlschlägt, werden die nginx-Error-Logs zurückgegeben<br />
→ Führt den vom Nutzer eingegebenen Befehl aus (prüft, ob es sich um `curl` oder `http` handelt)<br />
→ Gibt die Ausgabe der Anfrage zurück <br />
- Alle Anfragen werden von einem einzelnen gemeinsam genutzten Server verarbeitet <br />
<br />
- Sicherheitsansatz: ein wenig Isolation, ein wenig YOLO <br />
→ Das Frontend wird über ein CDN gehostet <br />
→ Keine DB-Nutzung, nur Browser Local Storage<br />
→ Jede nginx-Instanz kommt in ihren eigenen Network Namespace. Internetzugriff wird blockiert <br />
→ Nutzung des Free Tier von fly.io <br />
→ In der FAQ darum bitten, sich anderen gegenüber freundlich zu verhalten <br />
<br />
- Performance<br />
→ Sehr kleine Instanz (1 shared CPU, 256 MB RAM)<br />
→ Da das Frontend im CDN liegt, läuft das Backend nur bei tatsächlicher Nutzung<br />
→ Eine Anfrage dauert etwa 400 ms. Gar nicht schlecht <br />
→ Die Go-Version von httpbin ist leichter als die ursprüngliche Python-Version <br />
→ Die Frontend-Performance ist nicht besonders gut </p>
Noch keine Kommentare.