【问题标题】:Serving some files from Azure CDN to only certain users仅将 Azure CDN 中的某些文件提供给特定用户
【发布时间】:2020-10-03 18:21:29
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

  • 有趣的问题。就像一个想法:拥有两个发布到的实时环境是否可行?一种是公共环境,另一种环境具有可用的源映射但只能访问特定的 IP 范围?
  • @Ozone,有两个环境会在我们的特定设置中引入许多复杂性......所以虽然在技术上是可行的,但它是非常不可取的。很想听听是否有办法使用单个 CDN 端点。
  • 嗨@MichaelZlatkovsky-Microsoft。请你能更详细地描述你的用例吗?我认为这将有助于更好地了解您的问题。
  • 如果您需要这方面的安全性,this question 可能会很有用,尽管我没有通过 azure 完成答案,所以不确定配置是否是一对一的。

标签: azure azure-cdn


【解决方案1】:

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

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

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

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

Azure CDN 提供两种类型的规则引擎,一种是来自 Microsoft 的用于 Azure CDN 的 standard rule engine,另一种是来自 Verizon 的 other premium,它们提供了更高级的功能。

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

例如,标准规则引擎之一 match conditions - 也可用于高级规则引擎 - 是请求来自的 remote IP address:也许它可能是区分不同用户子集的好标准.

或者,正如您使用 Fiddle 所建议的那样,您可以分析传入的 request header 以寻找自定义的。

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

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

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

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

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

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

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

【讨论】:

  • 谢谢,这里有很多不错的选择!当我有机会时会尝试一种或多种方法,一旦我有机会实施它就会报告。另外,感谢您的编辑和添加的解释,这真的很有帮助!
  • 不客气,迈克尔。我很高兴听到这个答案很有帮助。请,如果您认为我可以提供任何帮助,请不要犹豫再次与我联系,我很乐意为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 2014-10-21
  • 2015-01-19
  • 2012-02-10
  • 2017-04-09
  • 2012-05-26
  • 2021-04-18
  • 2021-07-07
  • 1970-01-01
相关资源
最近更新 更多