首页 > 解决方案 > 仅将 Azure CDN 中的某些文件提供给特定用户

问题描述

假设我有一个由 Azure CDN 端点提供服务的网站(通过已上传到 blob 存储的文件)。

我希望每个人都可以使用缩小的网站内容——这部分很简单,因为这是 CDN 默认所做的。

理想情况下,我还可以在同一个 CDN 上使用源映射(这样//# sourceMappingURL=0-8d1d0e3cc4594b2c2758.js.map我的 JS 文件中的默认行为就会“正常工作”)。但是,我希望这些源地图只提供给一部分用户。

有没有办法完成这个场景?我很高兴以任何方式定义“子集”以使这种情况工作(例如,连接到某个 VPN 或处于某个 IP 地址范围内;或使用 Fiddler 设置秘密标头;等等)

谢谢!

标签: azureazure-cdn

解决方案


我假设您需要构建一个系统,在生产中允许向特定用户组(例如,一组开发人员)提供源地图,但不是对所有人,源地图不应公开访问。

有不同的选择可以帮助实现这一目标。

一方面,我们可以尝试使用规则引擎来分析接收到的 HTTP 流量,并根据认为合适的标准提供一个或另一个响应。

这些规则引擎允许您自定义处理 HTTP 请求的方式,方法是在传入请求上定义一组可能的匹配条件,以及在匹配条件适用时要执行的操作。

Azure CDN 提供两种类型的规则引擎,一种是 Microsoft 的 Azure CDN标准规则引擎,另一种是 Verizon 的高级规则引擎,它们提供了更高级的功能。

您如何使用这些规则引擎在很大程度上取决于您需要如何识别您的用户组以及您想要做什么来调节您的应用程序对源映射请求提供的响应。

例如,标准规则引擎匹配条件之一(也可在高级规则引擎中使用)是请求来自的远程 IP 地址:也许它可能是区分不同用户子集的好标准。

或者,正如您使用 Fiddle 所建议的那样,您可以分析传入的请求标头以搜索自定义标头。

Azure CDN Verizon Premium 规则引擎根据浏览器、设备类型等提供更高级的匹配条件。

一旦用户被识别,系统必须根据他们是属于一个组还是另一个组来考虑采取的行动。

标准Verizon规则引擎都提供了可能与此目的相关的内容。

我认为,如果您可以使用Verizon规则引擎,最好的选择是拒绝访问不属于允许访问源映射的组的用户发送的 HTTP 请求。

其他选项,虽然我认为如果您使用 webpack 和 SPA 更难实现,但可以将从一个用户子集收到的请求重定向到包含源映射的某些文件 - 或者index.html如果您在前端使用 SPA,则可以重定向到不同的页面,每个都有不同的js和css资源,有或没有sourcemaps - 或者重写URL以直接传递一组不同的文件。

另一个可能的操作可能是不在您的缩小文件中包含内联源映射位置,而是利用修改响应标头指向实际源映射Append的标头的功能。此标头只会发送给所需的用户组。同样,根据您构建前端的方式,这不是一件容易的事。SourceMap

最后,如果您使用 Webpack 和SourceMapDevToolPlugin构建前端,您可以使用publicPath选项在生产中将源映射指向非公开的、更面向开发人员的 URL 位置。这是本文所遵循的方法。我认为这种方法也值得研究。


推荐阅读