如何主持我的SPA?将example.com/spa引向CDN?

时间:2016-10-25 14:40:37

标签: html apache dns single-page-application cdn

当前状态

我有一个针对后端服务器运行的现有SPA应用程序。

我通过以下方式在我的生产服务器上安装Apache:

  • DNS example.com指向我的生产服务器。 Apache为我的域提供了适当的SSL配置
  • example.com/frontend导致部署在我服务器文件夹中的SPA文件(js / css / ...)
  • example.com/指向我在同一台服务器上运行的后端

我想做什么

我试图将我的前端资产部署到CDN。这里有很多选择,但我并不是在寻找可供选择的建议。

问题

如果我将我的应用部署到CDN,文件将不再托管在我的生产服务器上。所以我将在example.com上发布我的后端,在myapp.cdn.com上发布SPA

据我所知,DNS级别无法使example.com/cdn指向CDN文件。充其量我可以创建另一个域cdn.example.com并使其指向myapp.cdn.com但不幸的是它在我的情况下是不可能的......

Safari History API中存在其他浏览器不具备的不一致行为。

我的索引html页面由我的后端服务器(https://example.com/提供,并设置为基本网址我的前端网址(https://example.com/frontend)。它目前适用于所有浏览器,因为它是相同的域名。

在Safari中,如果您设置了与后端基本网址不同的域的基本网址(例如使用https://frontend.example.com/作为基本网址而不是https://example.com/frontend),则存在阻止我的安全例外情况应用程序通常使用HMTL5历史记录API。

我正在寻找什么

我已经知道了一些替代选项,比如直接在前端提供我的index.html页面,或者不使用基本网址。目前还没有寻找这样的解决方案(即使我考虑过长期改变)

在与我的后端服务器(example.com)相同的域上,使路径(如example.com/cdn)指向我的CDN文件的最佳方法是什么?

我正在寻找一个生产就绪的解决方案,性能保持正确,我的CDN功能仍然存在(etags缓存,HTTP2 ......)

我认为我的Apache服务器最终可能会收到/ cdn上的所有请求,并向CDN域发出永久重定向。即使它涉及到第一次服务的额外往返,只要它是第一次,我就可以使用它。它看起来像是生产就绪选项吗?有没有不错的选择?

1 个答案:

答案 0 :(得分:2)

通常,您希望您的前端在根域example.com/处可用,不是吗?后端可以在任何地方,这没关系,因为没有用户会看到它。

我建议:

  • 使用允许您使用自己的域名的CDN
  • 使用仅仅是缓存代理的CDN,而不是手动将静态文件推送到
  • 的内容
  • 设置DNS以将example.com指向CDN服务器
  • backend.example.com设置您的后端,而不是CDN'
  • 设置CDN以从backend.example.com
  • 中提取文件
  • example.com/api/...
  • 发出后端请求
  +-----+
  | CDN | \
  +-----+  \
example.com \
             \
  +-----+     \  +--------+
  | CDN | ------ | origin |
  +-----+     /  +--------+
example.com  backend.example.com
            /
  +-----+  /
  | CDN | /
  +-----+
example.com

这样:

  • example.com/是您的一个规范世界可见网址
  • 文件布局完全镜像原始服务器,不需要有两个版本
  • 所有请求都通过CDN进行代理,包括后端请求,这样可以减少后端服务器的负载,并在正确使用缓存时加快前端响应速度