Обратный прокси один и тот же голый домен для разных хостов - PullRequest
0 голосов
/ 29 июня 2018

Я управляю DNS моего домена с помощью Cloudflare.

Маркетинговые страницы для хостинга размещаются в Netlify.

Основное приложение размещено на Heroku.

Возможно ли с cloudflare + обнаженным доменом (my-example.com) иметь какие-то пути, обслуживаемые Netlify, и другие пути, предоставляемые Heroku?

Или я вынужден поставить одну из служб хостинга на поддомен?

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Отказ от ответственности: я работаю на Netlify.

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

Так как Netlify уже имеет CDN, неоптимально поставить CDN cloudflare (активируется с помощью «оранжевого облака» в их настройках) перед Netlify. Помимо того, что это неэффективно, это нарушает атомарное развертывание и откат Netlify , а также замедляет обслуживание страниц из наших наблюдений. Это может работать, но не рекомендуется. Однако DNS CloudFlare довольно производительный и может использоваться без их CDN (отключите «оранжевое облако»). Их DNS хорошо работает с контентом, размещенным на CDN Netlify.

Вот как можно настроить это для Netlify.

  1. Разверните ваши статические активы на сайте Netlify в вашем основном пользовательском домене, скажем, это my-example.com. В целях тестирования вы можете использовать встроенное имя сайта в Netlify (Some-something-1234.netlify.com) вместо my-example.com. Приведенные ниже примеры перенаправлений являются «независимыми от хоста», поэтому будут работать с именем хоста Netlify, Предварительный просмотр развертывания Netlify И ИМ производственного хоста.
  2. Найдите все пути для вашего динамического содержимого - для этого примера, скажем, динамические / main / * и / app / *, а ваш бэкэнд размещен в Heroku.
  3. Создание правил перенаправления прокси для указания на эти пути. Они могут быть размещены через CDN CloudFlare для защиты вашего API, если вы хотите - Netlify для прокси на сайтах Heroku, работающих на CloudFlare, работает нормально. Вы также можете выбрать прокси прямо на Heroku, что будет менее сложно. Netlify имеет встроенную защиту от DDoS-атак и все еще находится "перед" вашим приложением Heroku. До вас.
  4. Разверните эти прокси-правила и протестируйте.

Прокси Netlify (технически реверсивное проксирование) может подключаться к любому бэкэнду, который вам нужен, и НЕ показывает URL посетителю - он смотрит на них (панель URL в браузере, соединение HTTPS), как если бы они были подключены к моему -example.com все время, но содержимое возвращается из вашего бэкэнда (включая коды состояния HTTP. Этот ответ кэшируется в CDN Netlify, если это указано в ваших директивах Cache-Control: HTTP Header, которые отправляет приложение Heroku. Обратите внимание, что CloudFlare БУДЕТ ИЗМЕНЕН ваш заголовок Cache-Control, если вы установите его для контента, к которому они относятся по доверенности! Netlify не будет.)

Вот общие настройки:

/main/* https://yourapp.herokuapp.com/main/:splat 200! /app/* https://yourapp.herokuapp.com/main/:splat 200!

Обратите внимание, что если вы развертываете ЛЮБЫЕ активы в / main или / app в Netlify, они будут игнорироваться из-за запаздывания ! в этих правилах. См. https://www.netlify.com/docs/redirects/#note-on-shadowing для получения дополнительной информации о том, как это работает и альтернативы (TL; DR: развертывание некоторых вещей, таких как /main/logo.png на Netlify, но ничего, что Heroku не должен обслуживать, по сравнению с развертыванием ВСЕГО необходимого контента для / main / * на Героку).

Обратите внимание, что я предлагаю использовать идентичные пути в Netlify и Heroku (/main/*), а не проксировать до /somethingelse/*, так как легче отлаживать загрузку ресурсов, когда пути совпадают. Это не является обязательным требованием.

0 голосов
/ 29 июня 2018

Как уже упоминалось в комментарии, возможно использование сервиса cloudflare enterprise.

Но вы можете сделать это с помощью простой настройки обратного прокси nginx.

Разрешить DNS разрешать обратный прокси-сервер nginx и, основываясь на пути, соответствующим образом вызывать восходящие потоки.

eg. example.com, and then direct queries for /path1 to 100.100.100.100 and for /path2 to 200.200.200.200
...