Рубрики
Uncategorized

Фиксированный URL-обратный прокси с функциями без сервера (GCP) и NGROK

Фон — зачем вам понадобиться обратный прокси? Инструменты для веб -разработки появились долгим w … с меткой DevOps, Ngrok, WebDev, Serverless.

Инструменты веб -разработки прошли долгий путь, и большинство фреймворков и SDK сделали предварительное просмотр вашего приложения, когда вы работаете на бризе; Часто это так же просто, как запуск чего -то вроде npm start от вашего CLI. Но неожиданное препятствие, которое попали многие веб -разработчики, и могут казаться много Более сложно, «как мне использовать это за пределами моей локальной сети?». Такие вещи, как обмен экраном, запись экрана и живая общая связь VSCODE, могут решить эту проблему, если все, что вам нужно сделать, это показать свою демонстрацию Localhost своему удаленному коллеге. Но если вам нужно на самом деле разоблачить Ваш код для внешнего мира, эти инструменты терпят неудачу.

Например, очень распространенный сценарий пытается проверить сторонний сервис (Slack, Github, Twilio и т. Д.) Это общается с вашей кодовой базой, возможно, через веб -крючок. В этом сценарии вы не можете запустить сторонний код локально (например, запустив всю платформу GitHub на вашем компьютере), и если вы поместите что -то вроде «Localhost: 3001/Webhook» как WebHook, эта третья сторона будет Невозможно достичь кода, работающего в вашей локальной сети (по уважительной причине!).

Как мы решаем это?

Общее решение этой проблемы — это Обратный прокси в сочетании с SSH Туннелирование . У вас есть общедоступный URL, который указывает на общедоступный сервер, который использует обратный прокси для передачи запроса на другой порт и/или сервер, который, в свою очередь, прокси-прокси-туннели разработка компьютера. Это намного проще показать визуально, поэтому вот упрощенная диаграмма, показывающая это:

Есть много, что входит в это решение. Вам нужно запустить общедоступный сервер, настроить поддержку SSH на нем, иметь доменное имя, записи DNS, сертификаты SSL; У этого списка нет конца. Это не так сложнее ( Вот простое руководство ), но оно также не бесплатно или быстро.

Учитывая сложность настройки полной обратной прокси через трубопровод SSH, услуги возникли, чтобы упростить это для разработчиков.

Один из самых популярных и простых в использовании — Ngrok . С помощью одной команды вы можете мгновенно получить публичный URL -адрес, который вы можете использовать для доступа к местному хосту из любого места — общедоступного сервера или сложной настройки!

Например, чтобы передать HTTP -запросы из снаружи Ваша домашняя сеть в ваш локальный хост на порту 3001, вы можете использовать ngrok http 3001 И будьте запущены за считанные секунды!

NGROK в основном занимает место настройки туннеля SSH (с его клиентом CLI), так и общедоступным сервером с обратным прокси — вторым и третьим блоками в моей диаграмме выше. Он даже поставляется со встроенными инструментами, такими как панель панели, запрос инспектора и функциональность воспроизведения.

Ngrok также рекомендуется несколькими известными сторонними платформами ( twilio , github ).

Я никоим образом не связан с NGROK; Я просто думаю, что у них есть впечатляющий сервис.

Недостаток Ngrok

Хотя у NGROK очень щедрый свободный уровень, одно основное ограничение состоит в том, что генерируемые публичные URL -адреса являются случайными и не присваиваются, что означает, что каждый раз, когда вы запускаете его, вы получите другой случайный субдомен, например https://df12f52a.ngrok.io . Если вы пытаетесь разработать WebHooks или что-то подобное, это означает, что каждый раз, когда вам нужно перезагрузить NGROK, вам придется войти в свою стороннюю платформу, найти панель администратора, скопировать и вставить свой новый URL NGROK в графический интерфейс Анкет Или, если вы делитесь URL -адресами с коллегами, вам нужно будет продолжать отправлять им обновленные URL -адреса.

NGROK предлагает пользовательские субдомены или персонализированные домены, но они попадают под платную опцию, которая начинается с 5 долларов в месяц. Не так много, но это в основном та же цена, что и запуск NGROK или NGINX REAVE Proxy самостоятельно на платном сервере, таком как Digital Ocean.

Это такое решение, которое я одновременно как горд, так и стыдно. Потому что я дешев и не хотел покупать платный план NGROK только для тестирования WebHooks несколько раз в год или создать для него выделенный сервер, я начал думать о том, как я мог бы использовать бесплатные или очень недорогие обходные пути Анкет То, что я придумал, глупо, но это работает — просто добавьте еще один прокси с фиксированным URL перед изменяющимся URL Ngrok!

Позвольте мне уточнить. По мере того, как я исследовал варианты, я заметил, что облачные функции (функции Google Cloud или AWS Lambda) часто были самыми дешевыми в использовании, поскольку они начинаются в масштабе нулевого по дизайну (Они работают только при запросе). Сначала я думал о том, чтобы заменить Нгрока полностью, но это быстро раздалось; Они предназначены для быстрого выполнения и выхода и не будут работать для поддержания коннекции туннеля SSH.

Однако я понял две важные вещи; Облачные функции часто получают полупостоянный публичный URL-адрес, чтобы вызвать их, и они могут обрабатывать как входящие, так и исходящие запросы. Имея это в виду, я понял, что могу настроить облачную функцию с публичным URL, который просто прокси входящих запросов на повторный завоеванный адрес NGROK. Вот как это выглядит:

В этом сценарии Моя облачная функция общедоступного URL остается статичным, даже когда адрес NGROK он указывает на изменения !

Код, необходимый для создания этого, тоже очень прост; Его можно собрать с небольшим количеством Nodejs, Express, промежуточным программным обеспечением для тела и, что наиболее важно, http-proxy-middleware Анкет

Единственное предостережение здесь заключается в том, что облачная функция должна быть перераспределена каждый раз, когда изменяется URL -адрес Ngrok. Тем не менее, это очень легко автоматизировать; На самом деле, у меня уже есть команда, настроенная в моем Package.json , поэтому, если мой URL -адрес ngrok изменился, все, что мне нужно сделать, чтобы перераспределить с обновлением, это тип npm запустить ngrok-deploy Анкет

GCP

В итоге я пошел с Google Cloud Platform, чтобы предоставить функцию без серверов, которые прокси запрашивают. Их бесплатный уровень Включает 2 миллиона (!!!) казни в месяц, плюс 5 ГБ сетевого трафика. Этого более чем достаточно для некоторого простых тестирования веб -крючков.

Вы можете найти весь мой код здесь, который прокси входящие запросы в настраиваемое место назначения: github.com/joshuatz/gcp-proxy-func Анкет

Еще одна дешевая альтернатива

Помимо очевидных маршрутов оплаты плана профессионала или оплаты сервера для запуска собственной обратной прокси, есть некоторые другие альтернативы, которые я еще не изучил.

Один из вариантов может заключаться в том, чтобы обернуть обратный прокси в контейнер и развернуть его на платформе, которая поддерживает «масштаб масштабирования в нулевом» масштабирование контейнеров, и заставит его «проснуться» на SSH -соединении. Тогда вам пришлось бы заплатить за это, пока вы активно подключены через туннель SSH и используете его для разработки.

Этот пост впервые появился на: https://joshuatz.com/posts/2019/using-google-cloud-functions-permanent-url-to-proxy-ngrok-requests/

Оригинал: «https://dev.to/joshuatz/fixed-url-reverse-proxy-with-serverless-gcp-functions-and-ngrok-3aed»