1

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

的营销页面由 Netlify 托管。

主应用程序由 Heroku 托管。

使用 cloudflare + 裸域(my-example.com)是否有可能让 Netlify 提供一些路径,而 Heroku 提供其他路径?

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

4

2 回答 2

13

免责声明:我为 Netlify 工作。

您绝对可以在不运行自己的服务器或支付任何额外费用的情况下做到这一点。

由于 Netlify 已经有一个 CDN,因此将cloudflare 的 CDN(在其设置中使用“橙色云”激活)放在 Netlify 的前面不是最佳选择。除了效率低下之外,这样做还会破坏 Netlify 的原子部署和回滚,并且根据我们的观察也会减慢页面服务的速度。它可能有效,但不推荐。但是,CloudFlare 的 DNS 非常高效,可以在没有 CDN 的情况下使用(关闭“橙色云”)。他们的 DNS 可以很好地与 Netlify 的 CDN 上托管的内容配合使用。

以下是如何通过 Netlify 进行设置以完成此操作。

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

Netlify 的代理(技术上是反向代理)可以连接到您想要的任何后端,并且不会向访问者显示 URL - 它看起来(浏览器中的 URL 栏,HTTPS 连接)就好像它们已连接到我的示例。 com 整个时间,但内容从您的后端返回(包括 HTTP 状态代码。如果Cache-Control:Heroku 应用程序发送的 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 下的任何资产部署到 Netlify,由于!这些规则的尾随,它们将被忽略。有关其工作原理和替代方案的更多详细信息,请参阅https://www.netlify.com/docs/redirects/#note-on-shadowing(TL;DR:在 Netlify 上部署 /main/logo.png 之类的东西,但Heroku 不应该提供任何服务,而不是在 Heroku 上为 /main/* 部署所有需要的内容)。

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

于 2018-06-29T20:18:30.193 回答
0

正如评论中提到的,它可以使用 cloudflare 企业服务。

但是你可以通过一个简单的 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
于 2018-06-29T12:13:30.813 回答