Self-hosted HTTP tunnels with SSH and Nginx
🇬🇧 English
A friend wants to proofread your work-in-progress blog post, but its preview only runs on localhost:8080. Several tools can help. Some run as a commercial service, like ngrok or Cloudflare Quick Tunnels. Some are self-hostable but require a specific client, like frp or localtunnel. Some only require a plain SSH client but rely on a specific SSH server, like sish. Let’s implement a self-hosted solution with only Open SSH and nginx!
First, we forward connections from a port on a remote server to your local service: `$ ssh -N -R 0:localhost:8080 web02.luffy.cx`. When you specify `0` as the remote port, the server allocates a free port, such as 41535. Then, we configure nginx to proxy requests from `https://p41535.ssh.luffy.cx` to `http://127.0.0.1:41535` using a server block that matches the port in the domain name.
We also need to add DNS records for `*.ssh.luffy.cx` and get a wildcard certificate through Let’s Encrypt. In my case, Nix OS gets the certificates automatically. Access control is achieved using the ngx_http_secure_link_module, which computes a hash over a set of values, including a secret, and compares it with the hash from the request. The hash is base64-encoded and placed in the URL as a username, along with its expiration timestamp.
🇸🇦 العربية
أنفاق HTTP ذاتية الاستضافة باستخدام SSH و Nginx
يريد صديق أن يراجع مدونتك قيد التقدم، لكن معاينتها تعمل فقط على localhost:8080. عدة أدوات يمكن أن تساعد. بعض الأدوات تعمل كخدمة تجارية، مثل ngrok أو Cloudflare Quick Tunnels. بعض الأدوات قابلة للاستضافة الذاتية لكنها تتطلب عميلًا محددًا، مثل frp أو localtunnel. بعض الأدوات تحتاج فقط إلى عميل SSH عادي لكنها تعتمد على خادم SSH محدد، مثل sish. دعونا ننفذ حلًا ذاتيًا الاستضافة باستخدام فقط Open SSH و nginx!
أولاً، نقوم بإعادة توجيه الاتصالات من منفذ على خادم بعيد إلى خدمتك المحلية: `$ ssh -N -R 0:localhost:8080 web02.luffy.cx`. عندما تحدد `0` كمنفذ بعيد، يقوم الخادم بتعيين منفذ مجاني، مثل 41535. ثم، نقوم بتكوين nginx ليمثل طلبات من `https://p41535.ssh.luffy.cx` إلى `http://127.0.0.1:41535` باستخدام كتلة خادم تتطابق مع المنفذ في اسم النطاق.
كما نحتاج إلى إضافة سجلات DNS لـ `*.ssh.luffy.cx` والحصول على شهادة wildcard من خلال Let’s Encrypt. في حالتي، Nix OS يحصل على الشهادات تلقائيًا. يتم تحقيق التحكم في الوصول باستخدام وحدة ngx_http_secure_link_module، التي تحسب قيمة تجزئة على مجموعة من القيم، بما في ذلك سر، وتقارنها مع التجزئة من الطلب. يتم ترميز التجزئة بـ base64 وتوضع في عنوان URL كاسم مستخدم، جنبًا إلى جنب مع طابع زمني لانتهاء الصلاحية.
الكيانات الرئيسية: الشركات: Cloudflare, Let's Encrypt | المواقع: localhost:8080, web02.luffy.cx, p41535.ssh.luffy.cx, ssh.luffy.cx, acme.luffy.cx, Route 53
كيف أقوم بإعداد نفق HTTP ذاتي الاستضافة باستخدام SSH و Nginx؟
استخدم إعادة توجيه المنفذ البعيد عبر SSH مع `-R 0:localhost:8080` لتعيين منفذ على خادم بعيد، ثم قم بتكوين Nginx لتمثيل الطلبات من نطاق فرعي مثل `p41535.ssh.luffy.cx` إلى `http://127.0.0.1:41535`. secure الوصول باستخدام وحدة `secure_link` مع سر مشترك وتجزئات محدودة بالوقت.
🇧🇩 বাংলা
SSH এবং Nginx এর সাথে স্ব-হোস্টেড HTTP টানেল
একটি বন্ধু আপনার কাজ-প্রগতির ব্লগ পোস্ট প্রুফরিড করতে চান, কিন্তু এর প্রিভিউ শুধুমাত্র localhost:8080-এ চালায়। কয়েকটি টুল সাহায্য করতে পারে। কিছু বাণিজ্যিক পরিষেবা হিসেবে চলে, যেমন ngrok বা Cloudflare Quick Tunnels。 কিছু স্ব-হোস্টেবল কিন্তু একটি নির্দিষ্ট ক্লায়েন্টের প্রয়োজন, যেমন frp বা localtunnel。 কিছু শুধুমাত্র একটি সादा SSH ক্লায়েন্টের প্রয়োজন কিন্তু একটি নির্দিষ্ট SSH সার্ভারের উপর নির্ভর করে, যেমন sish। আসুন শুধুমাত্র Open SSH এবং nginx এর সাথে একটি স্ব-হোস্টেড সমাধান প্রয়োগ করি!
প্রথমে, আমরা একটি দূরবর্তী সার্ভারের একটি পোর্ট থেকে আপনার স্থানীয় সেবার সাথে সংযোগ ফরওয়ার্ড করি: `$ ssh -N -R 0:localhost:8080 web02.luffy.cx`। যখন আপনি দূরবর্তী পোর্ট হিসেবে `0` নির্দিষ্ট করেন, তখন সার্ভার একটি মুক্ত পোর্ট বরাদ্দ করে, যেমন 41535। তারপর, আমরা nginx কনফিগার করি যাতে এটি `https://p41535.ssh.luffy.cx` থেকে অনুরোধকে `http://127.0.0.1:41535` এ প্রক্সি করে, যেখানে একটি সার্ভার ব্লক ব্যবহার করা হয় যা ডোমেইন নামের পোর্টের সাথে মেলে।
আমাদের `*.ssh.luffy.cx` এর জন্য DNS রেকর্ড যোগ করার এবং Let’s Encrypt এর মাধ্যমে একটি ওয়ার্ডসার্টিফিকেট পাওয়ার প্রয়োজন আছে। আমার ক্ষেত্রে, Nix OS স্বয়ংক্রিয়ভাবে সার্টিফিকেট পায়। অ্যাক্সেস নিয়ন্ত্রণ ngx_http_secure_link_module এর ব্যবহার से হासিল করা হয়, যা একটি মানের সেটের উপর হ্যাশ গণনা করে, যার মধ্যে একটি রহস্যও অন্তর্ভুক্ত থাকে, এবং অনুরোধ থেকে হ্যাশের সাথে তুলনা করে। হ্যাশটি base64-এনকোড করা হয় এবং URL-এ একটি ব্যবহারকারীর নাম হিসেবে রাখা হয়, এর মেয়াদ শেষ হওয়ার টাইমস্ট্যাম্পের সাথে।
মुख্য entidades: কোম্পানিগুলো: Cloudflare, Let's Encrypt | অবস্থান: localhost:8080, web02.luffy.cx, p41535.ssh.luffy.cx, ssh.luffy.cx, acme.luffy.cx, Route 53
SSH এবং Nginx ব্যবহার করে স্ব-হোস্টেড HTTP টানেল কীভাবে সেট আপ করব?
SSH দূরবর্তী পোর্ট ফরওয়ার্ডিং ব্যবহার করুন `-R 0:localhost:8080` দিয়ে একটি দূরবর্তী সার্ভারে একটি পোর্ট বরাদ্দ করতে, তারপর Nginx কনফিগার করুন যাতে এটি `p41535.ssh.luffy.cx` এরような সাবডোমেইন থেকে অনুরোধকে `http://127.0.0.1:41535` এ প্রক্সি করে। `secure_link` মডিউল ব্যবহার করে শেয়ার্ড সিক্রেট এবং সময়-সীমিত হ্যাশের মাধ্যমে অ্যাক্সেস নিরাপদ করুন।
🇩🇪 Deutsch
Selbst gehostete HTTP-Tunnel mit SSH und Nginx
Ein Freund möchte Ihren Arbeit-in-Progress-Blogbeitrag Korrektur lesen, aber seine Vorschau läuft nur auf localhost:8080. Mehrere Tools können helfen. Einige laufen als kommerzieller Dienst, wie ngrok oder Cloudflare Quick Tunnels. Einige sind selbst-hostbar, benötigen aber einen spezifischen Client, wie frp oder localtunnel. Einige erfordern nur einen einfachen SSH-Client, verlassen sich aber auf einen spezifischen SSH-Server, wie sish. Lassen Sie uns eine selbst-hostete Lösung mit ausschließlich Open SSH und nginx implementieren!
Zunächst leiten wir Verbindungen von einem Port auf einem Remote-Server zu Ihrem lokalen Dienst weiter: `$ ssh -N -R 0:localhost:8080 web02.luffy.cx`. Wenn Sie `0` als Remote-Port angeben, weist der Server einen freien Port zu, wie beispielsweise 41535. Anschließend konfigurieren wir nginx, um Anfragen von `https://p41535.ssh.luffy.cx` an `http://127.0.0.1:41535` weiterzuleiten, indem wir einen Server-Block verwenden, der dem Port im Domainnamen entspricht.
Wir müssen außerdem DNS-Einträge für `*.ssh.luffy.cx` hinzufügen und ein Wildcard-Zertifikat über Let’s Encrypt erhalten. In meinem Fall erhält Nix OS die Zertifikate automatisch. Die Zugriffskontrolle wird über das Modul ngx_http_secure_link_module erreicht, das einen Hash über eine Reihe von Werten berechnet, einschließlich eines Geheimnisses, und ihn mit dem Hash aus der Anfrage vergleicht. Der Hash wird base64-kodiert und als Benutzername in die URL eingefügt, zusammen mit seinem Ablaufzeitstempel.
Wichtige Entitäten: Unternehmen: Cloudflare, Let's Encrypt | Orte: localhost:8080, web02.luffy.cx, p41535.ssh.luffy.cx, ssh.luffy.cx, acme.luffy.cx, Route 53
Wie richte ich einen selbst gehosteten HTTP-Tunnel mit SSH und Nginx ein?
Verwende SSH-Remote-Portweiterleitung mit `-R 0:localhost:8080`, um einen Port auf einem Remote-Server zuzuweisen, dann konfiguriere Nginx, um Anfragen von einer Subdomain wie `p41535.ssh.luffy.cx` an `http://127.0.0.1:41535` weiterzuleiten. Sichere den Zugriff mithilfe des `secure_link`-Moduls mit einem gemeinsamen Geheimnis und zeitlich begrenzten Hashes.
🇪🇸 Español
Túneles HTTP autohospedados con SSH y Nginx
Un amigo quiere corregir tu publicación de blog en progreso, pero su vista previa solo se ejecuta en localhost:8080. Varias herramientas pueden ayudar. Algunas se ejecutan como un servicio comercial, como ngrok o Cloudflare Quick Tunnels. Algunas son autohospedables pero requieren un cliente específico, como frp o localtunnel. Algunas solo requieren un cliente SSH sencillo pero dependen de un servidor SSH específico, como sish. Implementemos una solución autohospedada usando solo Open SSH y nginx!
Primero, reenviamos las conexiones desde un puerto en un servidor remoto a tu servicio local: `$ ssh -N -R 0:localhost:8080 web02.luffy.cx`. Cuando especificas `0` como el puerto remoto, el servidor asigna un puerto libre, como 41535. Luego, configuramos nginx para que proxyee las solicitudes desde `https://p41535.ssh.luffy.cx` a `http://127.0.0.1:41535` usando un bloque de servidor que coincida con el puerto en el nombre de dominio.
También necesitamos agregar registros DNS para `*.ssh.luffy.cx` y obtener un certificado comodín a través de Let’s Encrypt. En mi caso, Nix OS obtiene los certificados automáticamente. El control de acceso se logra usando el módulo ngx_http_secure_link_module, que calcula un hash sobre un conjunto de valores, incluyendo un secreto, y lo compara con el hash de la solicitud. El hash está codificado en base64 y se coloca en la URL como nombre de usuario, junto con su marca de tiempo de expiración.
Entidades clave: Empresas: Cloudflare, Let's Encrypt | Ubicaciones: localhost:8080, web02.luffy.cx, p41535.ssh.luffy.cx, ssh.luffy.cx, acme.luffy.cx, Route 53
¿Cómo configuro un túnel HTTP autohospedado usando SSH y Nginx?
Utilice el reenvío de puertos remoto de SSH con `-R 0:localhost:8080` para asignar un puerto en un servidor remoto, luego configure Nginx para proxyear las solicitudes desde un subdominio como `p41535.ssh.luffy.cx` a `http://127.0.0.1:41535`. Proteja el acceso usando el módulo `secure_link` con un secreto compartido y hashes con límite de tiempo.
🇫🇷 Français
Tunnels HTTP auto-hébergés avec SSH et Nginx
Un ami veut relire votre article de blog en cours de rédaction, mais son aperçu ne fonctionne que sur localhost:8080. Plusieurs outils peuvent aider. Certains fonctionnent en tant que service commercial, comme ngrok ou Cloudflare Quick Tunnels. Certains sont auto-hébergés mais nécessitent un client spécifique, comme frp ou localtunnel. Certains ne nécessitent qu'un client SSH simple mais dépendent d'un serveur SSH spécifique, comme sish. Mettons en œuvre une solution auto-hébergée avec uniquement Open SSH et nginx !
Tout d'abord, nous redirigeons les connexions depuis un port sur un serveur distant vers votre service local : `$ ssh -N -R 0:localhost:8080 web02.luffy.cx`. Lorsque vous spécifiez `0` comme port distant, le serveur attribue un port libre, tel que 41535. Ensuite, nous configurons nginx pour qu'il proxy les requêtes depuis `https://p41535.ssh.luffy.cx` vers `http://127.0.0.1:41535` en utilisant un bloc de serveur qui correspond au port dans le nom de domaine.
Nous devons également ajouter des enregistrements DNS pour `*.ssh.luffy.cx` et obtenir un certificat wildcard via Let’s Encrypt. Dans mon cas, Nix OS obtient les certificats automatiquement. Le contrôle d'accès est réalisé grâce au module ngx_http_secure_link_module, qui calcule un hachage sur un ensemble de valeurs, incluant un secret, et le compare avec le hachage de la requête. Le hachage est encodé en base64 et placé dans l'URL sous forme de nom d'utilisateur, accompagné de son horodatage d'expiration.
Entités clés : Entreprises : Cloudflare, Let's Encrypt | Lieux : localhost:8080, web02.luffy.cx, p41535.ssh.luffy.cx, ssh.luffy.cx, acme.luffy.cx, Route 53
Comment configurer un tunnel HTTP auto-hébergé avec SSH et Nginx ?
Utilisez le transfert de port distant SSH avec `-R 0:localhost:8080` pour attribuer un port sur un serveur distant, puis configurez Nginx pour proxyer les requêtes provenant d'un sous-domaine comme `p41535.ssh.luffy.cx` vers `http://127.0.0.1:41535`. Sécurisez l'accès en utilisant le module `secure_link` avec un secret partagé et des hachages limités dans le temps.
🇮🇳 हिन्दी
SSH और Nginx के साथ स्व-होस्टेड HTTP टनल
एक मित्र आपके कार्य-प्रगति ब्लॉग पोस्ट को प्रूफरीड करना चाहता है, लेकिन इसका पूर्वावलोकन केवल localhost:8080 पर चलता है। कई उपकरण मदद कर सकते हैं। कुछ वाणिज्यिक सेवा के रूप में चलते हैं, जैसे ngrok या Cloudflare Quick Tunnels。 कुछ स्व-होस्टेबल हैं लेकिन एक विशिष्ट क्लाइंट की आवश्यकता होती है, जैसे frp या localtunnel。 कुछ केवल एक साधारण SSH क्लाइंट की आवश्यकता होती है लेकिन एक विशिष्ट SSH सर्वर पर निर्भर करते हैं, जैसे sish। आइए केवल Open SSH और nginx के साथ एक स्व-होस्टेड समाधान लागू करें!
पहले, हम एक दूरस्थ सर्वर पर एक पोर्ट से आपके स्थानीय सेवा तक कनेक्शन फॉरवर्ड करते हैं: `$ ssh -N -R 0:localhost:8080 web02.luffy.cx`। जब आप दूरस्थ पोर्ट के रूप में `0` निर्दिष्ट करते हैं, तो सर्वर एक मुक्त पोर्ट आवंटित करता है, जैसे 41535। फिर, हम nginx को कॉन्फ़िगर करते हैं ताकि यह `https://p41535.ssh.luffy.cx` से अनुरोधों को `http://127.0.0.1:41535` तक प्रॉक्सी करे, जिसमें एक सर्वर ब्लॉक का उपयोग किया जाता है जो डोमेन नाम में पोर्ट से मेल खाता है।
हमें `*.ssh.luffy.cx` के लिए DNS रिकॉर्ड जोड़ने की भी आवश्यकता है और Let’s Encrypt के माध्यम से एक वाइल्डकार्ड सर्टिफिकेट प्राप्त करने की आवश्यकता है। मेरे मामले में, Nix OS स्वचालित रूप से सर्टिफिकेट प्राप्त करता है। एक्सेस कंट्रोल ngx_http_secure_link_module के उपयोग से प्राप्त किया जाता है, जो एक मान के सेट पर हैश की गणना करता है, जिसमें एक रहस्य भी शामिल होता है, और इसे अनुरोध से हैश के साथ तुलना करता है। हैश base64-एन्कोड किया जाता है और URL में एक उपयोगकर्ता नाम के रूप में रखा जाता है, साथ ही इसकी समाप्ति टाइमस्टैम्प के साथ।
मुख्य इकाइयाँ: कंपनियाँ: Cloudflare, Let's Encrypt | स्थान: localhost:8080, web02.luffy.cx, p41535.ssh.luffy.cx, ssh.luffy.cx, acme.luffy.cx, Route 53
SSH और Nginx का उपयोग करके स्व-होस्टेड HTTP टनल कैसे सेट अप करें?
SSH रिमोट पोर्ट फॉरवर्डिंग का उपयोग करें `-R 0:localhost:8080` के साथ एक दूरस्थ सर्वर पर एक पोर्ट आवंटित करने के लिए, फिर Nginx को कॉन्फ़िगर करें ताकि यह `p41535.ssh.luffy.cx` जैसे उपडोमेन से अनुरोधों को `http://127.0.0.1:41535` तक प्रॉक्सी करे। `secure_link` मॉड्यूल का उपयोग करके साझा रहस्य और समय-सीमित हैश के साथ एक्सेस को सुरक्षित बनाएं।
🇮🇩 Bahasa Indonesia
Terowongan HTTP Self-Hosted dengan SSH dan Nginx
Seorang teman ingin memeriksa posting blog Anda yang sedang dikerjakan, tetapi pratinjanya hanya berjalan di localhost:8080. Beberapa alat dapat membantu. Einige berjalan sebagai layanan komersial, seperti ngrok atau Cloudflare Quick Tunnels. Einige bersifat self-hosted tetapi memerlukan klien tertentu, seperti frp atau localtunnel. Einige hanya memerlukan klien SSH biasa tetapi bergantung pada server SSH tertentu, seperti sish. Mari kita terapkan solusi self-hosted menggunakan hanya Open SSH dan nginx!
Pertama, kita meneruskan koneksi dari sebuah port pada server jarak jauh ke layanan lokal Anda: `$ ssh -N -R 0:localhost:8080 web02.luffy.cx`. Ketika Anda menentukan `0` sebagai port jarak jauh, server mengalokasikan port yang bebas, seperti 41535. Kemudian, kita mengonfigurasi nginx untuk mem-proksi permintaan dari `https://p41535.ssh.luffy.cx` ke `http://127.0.0.1:41535` menggunakan blok server yang cocok dengan port dalam nama domain.
Kita juga perlu menambahkan rekaman DNS untuk `*.ssh.luffy.cx` dan mendapatkan sertifikat wildcard melalui Let’s Encrypt. Dalam kasus saya, Nix OS mendapatkan sertifikat secara otomatis. Kontrol akses dicapai menggunakan modul ngx_http_secure_link_module, yang menghitung hash dari sekumpulan nilai, termasuk rahasia, dan membandingkannya dengan hash dari permintaan. Hash tersebut di-encode base64 dan ditempatkan dalam URL sebagai nama pengguna, bersama dengan stempel waktu kedaluwarsa.
Entitas Utama: Perusahaan: Cloudflare, Let's Encrypt | Lokasi: localhost:8080, web02.luffy.cx, p41535.ssh.luffy.cx, ssh.luffy.cx, acme.luffy.cx, Route 53
Bagaimana cara mengatur terowongan HTTP self-hosted menggunakan SSH dan Nginx?
Gunakan forwarding port jarak jauh SSH dengan `-R 0:localhost:8080` untuk mengalokasikan port pada server jarak jauh, lalu konfigurasikan Nginx untuk mem-proksi permintaan dari subdomain seperti `p41535.ssh.luffy.cx` ke `http://127.0.0.1:41535`. Amankan akses menggunakan modul `secure_link` dengan rahasia bersama dan hash yang terbatas waktu.
🇯🇵 日本語
SSH と Nginx を使ったセルフホスト型 HTTP トンネル
友人があなたの仕事中のブログ投稿を校正したいと思っていますが、そのプレビューは localhost:8080 でしか実行されません。いくつかのツールが役立ちます。一部は商用サービスとして動作し、たとえば ngrok や Cloudflare Quick Tunnels があります。一部はセルフホスト可能ですが、特定のクライアントが必要で、たとえば frp や localtunnel があります。一部はプレーンな SSH クライアントのみを必要としますが、特定の SSH サーバーに依存しており、たとえば sish があります。Open SSH と nginx のみを使用してセルフホスト型ソリューションを実装しましょう!
まず、リモートサーバーのポートからローカルサービスへの接続を転送します: `$ ssh -N -R 0:localhost:8080 web02.luffy.cx`。リモートポートとして `0` を指定すると、サーバーは空いているポートを割り当て、たとえば 41535 になります。その後、ドメイン名のポートに一致するサーバーブロックを使用して、nginx を設定し、`https://p41535.ssh.luffy.cx` からのリクエストを `http://127.0.0.1:41535` にプロキシします。
また、`*.ssh.luffy.cx` の DNS レコードを追加し、Let’s Encrypt を通じてワイルドカード証明書を取得する必要があります。私の場合、Nix OS が証明書を自動的に取得します。アクセス制御は、ngx_http_secure_link_module を使用して実現されます。このモジュールは、秘密を含む一連の値に対してハッシュを計算し、リクエストからのハッシュと比較します。ハッシュは base64 エンコードされ、URL のユーザー名として配置され、その有効期限のタイムスタンプとともに含まれます。
主要なエンティティ: 企業: Cloudflare, Let's Encrypt | 場所: localhost:8080, web02.luffy.cx, p41535.ssh.luffy.cx, ssh.luffy.cx, acme.luffy.cx, Route 53
SSH と Nginx を使ってセルフホスト型 HTTP トンネルを設定するにはどうすればよいですか?
SSH のリモートポート転送を `-R 0:localhost:8080` とともに使用して、リモートサーバー上でポートを割り当て、その後 Nginx を設定して `p41535.ssh.luffy.cx` のようなサブドメインからのリクエストを `http://127.0.0.1:41535` にプロキシします。共有シークレットと時間制限付きハッシュを使用した `secure_link` モジュールでアクセスをセキュアにします。
🇧🇷 Português
Túneis HTTP auto-hospedados com SSH e Nginx
Um amigo quer revisar seu post de blog em andamento, mas a pré-visualização só roda em localhost:8080. Várias ferramentas podem ajudar. Alguns funcionam como um serviço comercial, como ngrok ou Cloudflare Quick Tunnels. Alguns são auto-hospedáveis, mas exigem um cliente específico, como frp ou localtunnel. Alguns só exigem um cliente SSH simples, mas dependem de um servidor SSH específico, como sish. Vamos implementar uma solução auto-hospedada usando apenas Open SSH e nginx!
Primeiro, encaminhamos as conexões de uma porta em um servidor remoto para o seu serviço local: `$ ssh -N -R 0:localhost:8080 web02.luffy.cx`. Quando você especifica `0` como a porta remota, o servidor aloca uma porta livre, como 41535. Então, configuramos o nginx para fazer proxy das requisições de `https://p41535.ssh.luffy.cx` para `http://127.0.0.1:41535` usando um bloco de servidor que corresponde à porta no nome de domínio.
Também precisamos adicionar registros DNS para `*.ssh.luffy.cx` e obter um certificado curinga por meio do Let’s Encrypt. No meu caso, o Nix OS obtém os certificados automaticamente. O controle de acesso é alcançado usando o módulo ngx_http_secure_link_module, que calcula um hash sobre um conjunto de valores, incluindo um segredo, e o compara com o hash da requisição. O hash é codificado em base64 e colocado na URL como um nome de usuário, junto com seu carimbo de data/hora de expiração.
Entidades-chave: Empresas: Cloudflare, Let's Encrypt | Locais: localhost:8080, web02.luffy.cx, p41535.ssh.luffy.cx, ssh.luffy.cx, acme.luffy.cx, Route 53
Como configurar um túnel HTTP auto-hospedado usando SSH e Nginx?
Use o encaminhamento de porta remoto do SSH com `-R 0:localhost:8080` para alocar uma porta em um servidor remoto, então configure o Nginx para fazer proxy das requisições de um subdomínio como `p41535.ssh.luffy.cx` para `http://127.0.0.1:41535`. Proteja o acesso usando o módulo `secure_link` com um segredo compartilhado e hashes com limite de tempo.
🇷🇺 Русский
Самостоятельно размещенные HTTP-туннели с SSH и Nginx
Друг хочет проверить ваш блог-пост в работе, но его предварительный просмотр работает только на localhost:8080. Несколько инструментов могут помочь. Некоторые работают как коммерческий сервис, например ngrok или Cloudflare Quick Tunnels. Некоторые можно разместить самостоятельно, но требуется определенный клиент, например frp или localtunnel. Некоторые требуют только обычного SSH-клиента, но зависят от определенного SSH-сервера, например sish. Давайте реализуем самостоятельно размещенное решение, используя только Open SSH и nginx!
Сначала мы перенаправляем соединения с порта на удаленном сервере на ваш локальный сервис: `$ ssh -N -R 0:localhost:8080 web02.luffy.cx`. Когда вы указываете `0` как удаленный порт, сервер выделяет свободный порт, например 41535. Затем мы настраиваем nginx для проксирования запросов с `https://p41535.ssh.luffy.cx` на `http://127.0.0.1:41535`, используя блок сервера, который соответствует порту в доменном имени.
Мы также должны добавить DNS-записи для `*.ssh.luffy.cx` и получить сертификат wildcard через Let’s Encrypt. В моем случае, Nix OS автоматически получает сертификаты. Контроль доступа достигается с помощью модуля ngx_http_secure_link_module, который вычисляет хеш от набора значений, включая секрет, и сравнивает его с хешем из запроса. Хеш кодируется в base64 и помещается в URL как имя пользователя, вместе с меткой времени истечения срока действия.
Ключевые сущности: Компании: Cloudflare, Let's Encrypt | Местоположения: localhost:8080, web02.luffy.cx, p41535.ssh.luffy.cx, ssh.luffy.cx, acme.luffy.cx, Route 53
Как настроить самостоятельно размещенный HTTP-туннель с использованием SSH и Nginx?
Используйте удаленное перенаправление портов SSH с параметром `-R 0:localhost:8080` для выделения порта на удаленном сервере, затем настройте Nginx для проксирования запросов с поддомена вроде `p41535.ssh.luffy.cx` на `http://127.0.0.1:41535`. Обеспечьте безопасный доступ, используя модуль `secure_link` с общим секретом и хешами с ограничением по времени.
🇨🇳 简体中文
使用 SSH 和 Nginx 的自托管 HTTP 隧道
A friend wants to proofread your work-in-progress blog post, but its preview only runs on localhost:8080. Several tools can help. Some run as a commercial service, like ngrok or Cloudflare Quick Tunnels. Some are self-hostable but require a specific client, like frp or localtunnel. Some only require a plain SSH client but rely on a specific SSH server, like sish. Let’s implement a self-hosted solution with only Open SSH and nginx!
First, we forward connections from a port on a remote server to your local service: `$ ssh -N -R 0:localhost:8080 web02.luffy.cx`. When you specify `0` as the remote port, the server allocates a free port, such as 41535. Then, we configure nginx to proxy requests from `https://p41535.ssh.luffy.cx` to `http://127.0.0.1:41535` using a server block that matches the port in the domain name.
We also need to add DNS records for `*.ssh.luffy.cx` and get a wildcard certificate through Let’s Encrypt. In my case, Nix OS gets the certificates automatically. Access control is achieved using the ngx_http_secure_link_module, which computes a hash over a set of values, including a secret, and compares it with the hash from the request. The hash is base64-encoded and placed in the URL as a username, along with its expiration timestamp.
如何使用 SSH 和 Nginx 设置自托管 HTTP 隧道?
使用 SSH 远程端口转发,带有 `-R 0:localhost:8080`,在远程服务器上分配一个端口,然后配置 Nginx 将来自如 `p41535.ssh.luffy.cx` 的子域名请求代理到 `http://127.0.0.1:41535`。使用 `secure_link` 模块结合共享密钥和有时限的哈希来保护访问。