Tunnels HTTP auto-hébergés avec SSH et Nginx
Original : Self-hosted HTTP tunnels with SSH and Nginx
Pourquoi c'est important
Une alternative concrète aux services payants, sans dépendance externe ni agent propriétaire.
Vincent Bernat explique comment remplacer ngrok ou Cloudflare Quick Tunnels par une solution auto-hébergée combinant OpenSSH et Nginx, avec contrôle d'accès via ngx_http_secure_link_module.
Partager un aperçu local d'un article en cours d'écriture — accessible uniquement sur localhost — est un problème courant. Les solutions commerciales comme ngrok ou Cloudflare Quick Tunnels fonctionnent, mais dépendent d'un tiers. D'autres outils auto-hébergés comme frp ou sish exigent un client spécifique. Vincent Bernat propose une alternative n'utilisant qu'OpenSSH et Nginx.
Le principe : `ssh -R 0:localhost:8080 web02.luffy.cx` transfère un port local vers le serveur distant, qui alloue dynamiquement un port libre (ex. 41535). Nginx redirige ensuite les requêtes de `https://p41535.ssh.luffy.cx` vers `http://127.0.0.1:41535` via une regex dans la directive `server_name`. Un certificat wildcard Let's Encrypt et un enregistrement DNS `*.ssh.luffy.cx` complètent l'installation.
La sécurité repose sur `ngx_http_secure_link_module` : un hash MD5 combinant un secret, le port et une date d'expiration est encodé en base64 et transmis comme nom d'utilisateur HTTP Basic Auth. L'URL finale ressemble à `https://6J3jK1WmB15c6WmjW_X-Wg--1789928654@p41535.ssh.luffy.cx/`. Bernat note que l'entropie du port alloué reste faible (~14,8 bits), d'où l'intérêt du hash.