terrain de jeu nginx
(jvns.ca)<p>- Un terrain de jeu permettant de tester librement des configurations nginx <br />
→ saisir une config ainsi que des commandes `curl`/`http`, puis cliquer sur Run pour les exécuter<br />
→ affiche le résultat de la commande exécutée et le journal d’erreurs de nginx <br />
- Frontend en Vue.js + backend en Go (seul le code serveur est publié via Gist)<br />
- Quand on appuie sur le bouton d’exécution, le backend Go effectue les opérations suivantes <br />
→ enregistre le fichier de configuration dans un fichier temporaire<br />
→ crée un nouvel espace de noms réseau <br />
`ip netns add $RANDOM_NAMESPACE_NAME`<br />
→ lance `go-httpbin` sur le port 777<br />
→ démarre nginx<br />
→ attend 100 ms jusqu’à ce que nginx démarre correctement ; en cas d’échec, renvoie le journal d’erreurs de nginx<br />
→ exécute la commande saisie par l’utilisateur (en vérifiant qu’il s’agit bien de `curl` ou `http`)<br />
→ renvoie la sortie de la requête <br />
- Toutes les requêtes sont traitées par un seul serveur mutualisé <br />
<br />
- Approche côté sécurité : un peu d’isolation, un peu de YOLO <br />
→ le frontend est hébergé sur un CDN <br />
→ pas de base de données ; uniquement le stockage local du navigateur<br />
→ chaque nginx est placé dans son propre espace de noms réseau, avec blocage de l’accès à Internet <br />
→ utilisation du free tier de fly.io <br />
→ ajouter une FAQ pour encourager les gens à se comporter correctement <br />
<br />
- Performances<br />
→ très petite instance (1 CPU partagé, 256 Mo de RAM)<br />
→ le frontend étant sur un CDN, le backend ne tourne que lors d’une utilisation réelle<br />
→ une requête prend environ 400 ms. Pas mal <br />
→ la version Go de httpbin est plus légère que la version originale en Python <br />
→ les performances du frontend ne sont pas vraiment excellentes </p>
Aucun commentaire pour le moment.