将同一裸域反向代理到不同主机

时间:2018-06-28 22:04:47

标签: heroku dns reverse-proxy cloudflare netlify

我正在使用Cloudflare管理域的DNS。

Netlify托管其营销页面。

主应用程序由Heroku托管。

cloudflare +裸域(my-example.com)是否有可能由Netlify提供服务的某些路径以及由Heroku提供的其他路径?

还是我被迫将托管服务之一放在子域上?

2 个答案:

答案 0 :(得分:6)

免责声明:我为Netlify工作。

您绝对可以在不运行您自己的服务器或支付任何额外费用的情况下执行此操作。

由于Netlify已经具有CDN,因此将cloudflare's CDN (activated with the 'orange cloud' in their settings)放在Netlify的前面是次优的。除了效率低下外,这样做还会破坏Netlify的atomic deploys and rollbacks,并且还会减慢我们观察到的页面服务。它可能有效,但不建议这样做。但是,CloudFlare的DNS相当出色,可以在没有CDN的情况下使用(关闭“橙色云”)。他们的DNS与Netlify的CDN上托管的内容配合得很好。

这里是通过Netlify进行设置的方法。

  1. 将静态资产部署到主要自定义域中的Netlify站点,假设它是my-example.com。为了进行测试,您可以使用Netlify上的内置站点名称(something-something-1234.netlify.com),而不是my-example.com。下面的示例重定向是“主机不可知的”,因此将与Netlify主机名Netlify deploy previews和生产主机名一起使用。
  2. 找到动态内容的所有路径-在此示例中,动态的是/ main / *和/ app / *,并且后端托管在Heroku上。
  3. 创建proxy redirect rules指向这些路径。如果您愿意,可以通过CloudFlare的CDN托管它们,以保护您的API-Netlify代理Heroku上面向CloudFlare的站点的代理工作正常。您也可以选择直接代理Heroku,这将变得不那么复杂。 Netlify内置了一些DDoS保护,仍然在Heroku应用的“前面”。由您决定。
  4. 部署这些代理规则并进行测试。

Netlify的代理(技术上是反向代理)可以连接到您想要的任何后端,并且不向访问者显示URL-它看起来像他们(浏览器中的URL栏,HTTPS连接),就好像他们已连接到我的-example.com,但是内容是从后端返回的(包括HTTP状态代码。如果您的Heroku应用发送的Cache-Control: HTTP标头指令指示此响应,则将其缓存在Netlify的CDN上。请注意,CloudFlare 将更改您的Cache-Control标头,以防您将其设置在它们要代理的内容上!Netlify不会。)

这是一个常见的设置:

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

请注意,如果您将/ main或/ app下的ANY资产部署到Netlify,则由于这些规则的结尾!,它们将被忽略。有关其工作原理和替代方法的更多详细信息,请参见https://www.netlify.com/docs/redirects/#note-on-shadowing(TL; DR:在Netlify上部署/main/logo.png之类的东西,但Heroku应该不提供服务或为/ main / *部署所有所需内容在Heroku上。)

请注意,我建议在Netlify和Heroku(/main/*)上使用相同的路径,而不是代理到/somethingelse/*,因为在路径匹配时调试资产加载更加容易。但这不是必需的。

答案 1 :(得分:0)

如评论中所述,它可以使用cloudflare企业服务。

但是您可以通过简单的nginx反向代理设置来做到这一点。

已将DNS解析为nginx反向代理,并根据该路径适当地调用上游。

config