使用 Azure Front Door 为 SPA 提供服务

Use Azure Front Door to serve a SPA

我希望能够仅使用 Azure Front Door 而非 Azure CDN 为 SPA 提供服务。看起来 Front Door 提供了 CDN 提供的缓存,我可以向它添加多个区域存储帐户,使其在全球范围内扩展。

问题是,我无法匹配 index.html 个文件的路径。找到 this feedback,看起来这可以使用 URL 重写和重定向来解决,但不知道如何解决。

我有 /test//test 来匹配下面的路由,所以它应该匹配 /test 并将请求指向 /test/index.html 但这不起作用。可以不做基于文件的转发吗?

这花了一些时间才弄清楚,但这是解决方案。

创建 Blob 存储

要托管 SPA,您需要 Azure 中的 blob 存储帐户,并且应将这些存储帐户配置为接收静态网页流量。导航到 设置,然后在 blob 存储设置中导航到 静态网站

要在此处添加内容 - 再次导航到您的 blob 存储,您应该会看到一个名为 $web.

的容器

现在 $web 容器是您应该放入所有静态文件的容器,只需确保它可以公开访问(取决于您创建它的方式,它可能不是)

有关如何使用 blob 存储制作静态网站的更多文档位于此处:https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website

获取静态网站端点

启用静态网站并单击静态网站边栏选项卡后,它应该会为您提供与常规 blob 访问端点不同的端点 - 支持静态网站的端点。看起来像这样的东西:https://somerandomstorageaccount.z8.web.core.windows.net/

将静态网站终结点作为后端添加到 Azure Front Door

导航到您的 Front Door 设计器

导航到您的后端池并添加一个新条目(如果您没有任何内容)。 你现在应该将这个新的网站端点添加为你的 Azure Front Door 的后端。下图是更新配置,但添加它同样简单,您只需将其添加为 Custom Host 后端类型并将其指向您的 blob 静态网站位置。

为了获得更好的性能,使用多个存储帐户(来自不同区域)并将所有这些帐户添加到 Front Door 配置中的后端,并在 Front Door 中打开缓存。

@Mavi Domates 上面的回答很好,但没有解决如何使用 Blob 存储正确制作 SPA 路由。

根本原因: Blob Storage 的静态网站不会为不完全存在的 SPA 路由重写 URLs 和 returns 返回 404在存储容器中。

Azure CDN 修复:

创建 URL 重写规则以将任何零长度文件扩展名转发回 index.html。 Link

Azure 前门 解决方法:

(注意这说的是变通办法...这不是解决方法)。在您的 Blob 存储静态网站配置中,将 Index document nameError document path 都设置为 index.html。这会导致任何 404 错误被重定向到您的 SPA 入口点。您的 SPA 会工作,但任何直接导航到 SPA 端点都会 return 404。(这会带来一大堆其他问题,但至少网站可以工作,对吧?)