将 Azure CDN 中的某些文件仅提供给某些用户

Serving some files from Azure CDN to only certain users

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

我希望 缩小的网站内容 可供所有人使用 - 这部分很简单,因为这是 CDN 默认执行的操作。

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

有没有办法实现这个场景?我很乐意以任何方式定义“子集”,以使这种情况有效(例如,连接到某个 VPN 或处于某个 IP-address 范围内;或使用 Fiddler 设置一个秘密 header;等)

谢谢!

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

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

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

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

Azure CDN 提供两种类型的规则引擎,一种来自 Verizon standard rule engine for Azure CDN from Microsoft, and other premium,它提供更高级的功能。

您如何使用这些规则引擎在很大程度上取决于您需要如何识别您的用户组,以及您想如何调整您的应用程序对 sourcemap 请求提供的响应。

例如,请求来自的标准规则引擎之一 match conditions - also available in the premium rule engine - is the remote IP address:也许这可能是区分不同用户子集的一个很好的标准。

或者,正如您建议使用 Fiddle,您可以分析传入的 request header 以搜索自定义的。

Azure CDN Verizon Premium 规则引擎提供更高级的 match conditions 基于浏览器、设备类型等。

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

两个 standard and Verizon 规则引擎都提供了可能与此目的相关的内容。

我认为最好的选择是,如果您可以使用 Verizon rule engine, will be to deny access 由不属于允许访问 sourcemaps 的组的用户发送的 HTTP 请求。

其他选项,虽然我认为如果您正在使用 webpack 和 SPA 会更难实施,但可以 redirect the requests received from one subset of users to certain files which contains the sourcemaps - or to different index.html pages if you are using SPA in your frontend, each with different js and css resources, with sourcemaps or not -, or rewrite the URL 直接交付一组不同的文件。

另一种可能的操作是不在缩小文件中包含内联源映射位置,而是利用 modify response headers and Append a SourceMap header 指向实际源映射的功能。此 header 只会发送给所需的用户组。同样,根据您构建前端的方式,这并非易事。

最后,如果你使用的是Webpack和SourceMapDevToolPlugin to build your frontend, you can use the publicPath option to point, in production, your sourcemaps to a non public, more developer oriented, URL location. This is the approach followed in this article。我认为这种方法也值得研究。