Друг хочет проверить ваш блог-пост в работе, но его предварительный просмотр работает только на 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
Источник: Hacker News · Сводку подготовил HeadlinesBriefing