标签: azure-cdn

如何防止恶意带宽 - 吸血鬼请求滥用Azure CDN带宽?

只是为了让人们知道,我确实按照一些人的建议稍微编辑了这个帖子,这个问题已经发布在Azure CDN论坛上.我在StackOverflow上发布它的原因是尝试吸引更多的受众,希望处理相同/类似问题的人可以提供有价值的解决方案/反馈.据我所知,目前还没有解决这个问题的办法,但这会影响任何使用CDN传递内容的企业.我愿意进一步编辑这个问题,但我要问的是,人们不会简单地对这个问题进行投票,因为这听起来像是一个"咆哮",它不是,我可以向你保证它会影响成千上万的企业无论他们是否意识到这一点,每年都要花费数千美元.

所以情况就是这样.假设我正在建立一个图片库网站,我想使用Azure CDN为我提供我的内容.在后端,Azure CDN将从Azure存储帐户中提取内容.CDN速度快,功能强大,但看起来虽然在防止有人能够大量提取内容并因此给用户留下巨大的带宽费用方面有点不安全.让我展示一下我的意思.

因此,昨晚我决定编写一个简单的控制台应用程序,将我的未来的简单图像下载到图片库网站,在for {}循环中,代码如下:

namespace RefererSpoofer
{
    class Program
    {
        static void Main(string[] args)
        {
            HttpWebRequest myHttpWebRequest = null;
            HttpWebResponse myHttpWebResponse = null;

            for (int x = 0; x < 1000; x++)
            {
                string myUri = "http://myazurecdnendpoint.azureedge.net/mystoragecontainer/DSC00580_1536x1152.jpg";
                myHttpWebRequest = (HttpWebRequest) WebRequest.Create(myUri);
                myHttpWebRequest.Referer = "www.mywebsite.com";

                myHttpWebResponse = (HttpWebResponse) myHttpWebRequest.GetResponse();

                Stream response = myHttpWebResponse.GetResponseStream();
                StreamReader streamReader = new StreamReader(response);

                Image image = Image.FromStream(streamReader.BaseStream);

                image.Save(string.Format("D:\\Downloads\\image{0}.Jpeg", x), ImageFormat.Jpeg);

                myHttpWebResponse.Close();
            }

            Console.ReadKey();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此控制台应用程序对我的Azure CDN端点上托管的映像文件发出1000个超快速连续请求,并将它们保存到我的PC上的"D:\ Downloads"文件夹中,每个文件名对应于for {}循环迭代,即image1.jpeg,image2.jpeg等

刚刚发生了什么?在大约1分钟的时间里,我花了140MB的带宽.这是一款高级CDN,价格为0.17美元/ …

azure azure-cdn

5
推荐指数
1
解决办法
573
查看次数

如何清除Azure CDN以刷新任何缓存的内容?

我将新内容上传到CDN时需要刷新内容.当内容发生变化时,更新数据立即可用非常重要.但是CDN缓存并没有立即反映出来.

我提到网站' https://msdn.microsoft.com/en-us/library/mt634451.aspx '并试图实现相同的功能.但是,当我试图点击它时,我得到授权错误.

{"error":{"code":"AuthenticationFailed","message":"身份验证失败.'授权'标头丢失." }}

但是文章没有提供有关需要进入Authorization标头的信息.有人请帮助我,如何构建此授权标题?如果您需要更多详细信息,请告诉我.

注意:我检查了SO帖子' 如何强制清除或无效Azure CDN内容?'它确实提供了msdn链接的链接(与上面相同),但没有关于授权标题的链接.

azure azure-storage-blobs azure-cdn

5
推荐指数
1
解决办法
5448
查看次数

azure cdn purge不刷新缓存内容

我有一个连接到blob存储的Azure CDN(Verizon,premium).根据本教程中的第6步,我有2条规则.这些规则旨在强制CDN在调用CDN的根目录时提供"index.html".它们可能与问题相关,也可能不相关,但步骤6中描述如下:

  1. 确保下拉列表显示"IF"和"Always"
  2. 单击"功能"旁边的"+"按钮两次.
  3. 将两个新创建的下拉菜单设置为"URL Rewrite"
  4. 将所有源和目标下拉列表设置为您创建的端点(具有端点名称的值)
  5. 对于第一个源模式,设置为((?:[^ \?] /)?)($ | \?.)
  6. 对于第一个目标模式,设置为$ 1index.html $ 2
  7. 对于第二个源模式,设置为((?:[^ \?] /)?[^ \?/.] +)($ | \?.)
  8. 对于第二个目标模式,设置为$ 1/index.html $ 2

我最初上传文件到blob存储,能够通过CDN点击它们(证明上述规则正常工作),然后更改本地文件(调试)以上传到blob存储.更新blob存储上的所有文件并选中"purge all"选项后手动清除CDN端点后,CDN将为旧文件提供服务,并在直接访问blob存储时提供新文件.这似乎发生在每个文件中(即使直接命中文件,而不仅仅是index.html).等待~10小时后,仍然会发生这种情况,清除浏览器缓存,并尝试从未用过访问CDN的浏览器.

有谁知道可能会发生什么?它是否缓存在我的网络和CDN端点之间?我觉得我可能会错过很简单的东西......

编辑1:我有另一个Verizon(非高级)CDN连接到同一个存储容器,它在清除后获取正确的文件; 然而,即使是现在(24小时后),高级CDN也没有提供更新的文件.

编辑2:称为微软对Azure的支持,他们花了大约6个小时进行调查,但没有成功.我们最终再次尝试清除,现在正在发送更新的文件.仍然不确定问题是什么.

azure azure-cdn azure-blob-storage

5
推荐指数
1
解决办法
2172
查看次数

Azure CDN规则引擎为站点请求的文件添加默认文档EXCEPT

我使用Azure Verizon CDN从Blob存储发布我的Web应用程序(SPA).我已成功设置自定义域和SSL.我在CDN中添加了一个重写规则,以重定向到默认文档index.html.基本上,这会接收传入的请求,并在URL路径和任何查询字符串之间插入"index.html".所以 mydomain.com/startup去吧mydomain.com/startup/index.html

mydomain.com/homepagemydomain.com/homepage/index.html

然后 mydomain.com/showuser/?userId=xxxxxmydomain.com/showuser/index.html/?userid=xxxxx

一切似乎都运作良好.

现有规则添加默认文档

SPA使用的地址栏中的URL从不请求实际文件,但默认文档index.html中的代码确实如此.这些文件请求都是404失败的,因为我猜重写规则也是这样做的.

如果URL包含文件名,我想要的是一些不执行URL重写的方法.规则引擎阻止我在使用URL重写功能时添加这样的条件 - 显然,在尝试使用URL重写功能时,您无法在URL上使用任何匹配条件.

尝试使用涉及URL文件名的条件时出错

url-rewriting azure azure-cdn

5
推荐指数
1
解决办法
1026
查看次数

表存储服务(Azure 的 nosql 实现)与 Windows Azure 缓存(非结构化内存缓存)

我们想在 Azure 中实现缓存有两个主要原因:

  1. 加快重复数据访问
  2. 减轻数据库压力

以下是我们计划缓存的数据的特征:

  1. 相对较小(1 - 100 kb)
  2. 特定于每个客户
  3. 不是私有的,但我们真的不希望随机的人浏览我们的整个缓存
  4. XML 或 JSON
  5. 由 C# 使用(即不直接在 html 中链接)
  6. 大多数星期数据不会改变,尽管有些日子数据可能会改变几次

出于这个特定目的,表存储似乎比 Blob 存储更好(我们只是为图像、CSS 和 JavaScript 实现了 Blob 存储)并且Windows Azure 缓存似乎比 Windows Azure 共享缓存更好(也许几乎总是更好,共享缓存主要是遗留的功能在这一点)。

两者的编程 API 看起来都很简单。与我们为云站点支付的费用相比,每个站点的成本似乎可以忽略不计。

到目前为止,由于我们认为 Azure 缓存的优缺点,我们倾向于使用表存储。作为 .Net 老手,我们对内存缓存比 NoSql 风格的解决方案更熟悉:

Windows Azure 缓存的问题:

  1. 如果 VM 移动到不同的服务器(由 Microsoft 出于负载平衡或其他原因),内存中的缓存是否完整移动?
  2. 我们猜测,每当我们向云发布更改时,它都会清除现有的内存缓存
  3. 虽然用户在进行更改时很少对缓存数据进行更改,但他们可能会在几秒钟内进行多次更新,我们不确定这将如何与位于运行 Web 角色的多个节点上的缓存一起使用,尤其是在流量增加的情况下. (这可能也是表存储的一个问题!)
  4. 表存储看起来更容易调试

Windows Azure 缓存的优势

  1. 稍微快一点

azure nosql azure-cdn azure-caching

4
推荐指数
1
解决办法
1743
查看次数

从脚本更新 Azure CDN 自定义域证书

如何在不停机的情况下触发 Azure CDN 从 Key Store 读取最新版本的自定义证书?

我的 CDN 设置工作正常,但鉴于 Let's Encrypt,证书寿命很短,需要自动化更新。这样做az keyvault certificate import是对Azure的CLI小事足以证书更新为重点库,但接下来呢?如何告诉 Azure CDN 开始使用新版本的证书?

失败的尝试

  • 等了几个小时。什么都没有发生。
  • az cdn custom-domain enable-https在已启用 HTTPS 的域上运行。结果:内部配置错误和几个小时的停机时间,首先禁用自定义域然后启用它。不过,证书已更新。

从 Azure 门户

自定义域证书版本的 Azure 门户工具提示显示“选择要使用的证书版本。默认情况下,我们将使用最新版本。 ” 创建终结点时确实如此,但如何开始使用最新版本?已经从下拉列表中选择了最新版本,但我确实选择了以前的版本并选择了最新版本。这样做启用了“保存”。

保存表单导致证书的无停机更新。不错,但考虑到自动化和脚本编写,并不是真正可行的方法。

可能有用的东西,但我还没有测试过

  • 应用 CDN 设置的 ARM 模板
  • Powershell Az.Cdn具有Start-AzCdnEndpoint/ Stop-AzCdnEndpointcmdlet。也许有帮助,但 100% 保证会产生停机时间。

我可以在下一个更新周期尝试什么吗?

azure azure-cdn azure-powershell azure-cli

4
推荐指数
1
解决办法
1979
查看次数

静态网站托管在 Azure 中,HTTPS 工作 HTTP 不工作

我主要通过遵循 Microsoft 教程在 azure 中托管了一个静态网站。该过程是创建存储帐户、创建 CDN 终结点、将自定义域映射到终结点,然后使用 azure 管理的 SSL 证书启用 HTTPS。

自定义域正在工作,但问题首先是,尽管在 Azure CDN 中它表示启用了 HTTP 和 HTTPS,但我只能通过 HTTPS 访问网站,当我尝试使用 HTTP 时,收到的错误是“正在访问的帐户没有” '不支持HTTP'。另一件事是,为了导航到安全站点,我必须将整个 URL 放在搜索栏中,以 https 开头,否则无法找到该网站。我不确定这是否正常,但如果我考虑一般的网页浏览,这通常是没有必要的。

任何有关如何解决此问题的想法将不胜感激。

azure azure-cdn azure-custom-domain

4
推荐指数
1
解决办法
2635
查看次数

使用IIS URL重写模块指向Azure CDN

我在我的Web服务器上安装了Url Rewrite Module,该服务器运行Windows Server 2012 R2,网址如下:http://staging.mysite.net/

我将图像,字体,脚本等加载到Azure CDN中.

我在Web.config中指定了以下规则:

<rewrite>
    <rules>
        <rule name="CDN: fonts" stopProcessing="true">
            <match url="^fonts/(.*)" />
            <action type="Rewrite" url="http://cdn.staging.mysite.net/fonts/{R:1}" appendQueryString="true" />
        </rule>
        <rule name="CDN: images" stopProcessing="true">
            <match url="^images/(.*)" />
            <action type="Rewrite" url="http://cdn.staging.mysite.net/images/{R:1}" appendQueryString="true" />
        </rule>
        <rule name="CDN: pdf" stopProcessing="true">
            <match url="^pdf/(.*)" />
            <action type="Rewrite" url="http://cdn.staging.mysite.net/pdf/{R:1}" appendQueryString="true" />
        </rule>
        <rule name="CDN: scripts" stopProcessing="true">
            <match url="^scripts/(.*)" />
            <action type="Rewrite" url="http://cdn.staging.mysite.net/scripts/{R:1}" appendQueryString="true" />
        </rule>
        <rule name="CDN: style" stopProcessing="true">
            <match url="^style/(.*)" />
            <action type="Rewrite" url="http://cdn.staging.mysite.net/style/{R:1}" appendQueryString="true" />
        </rule>
    </rules> …
Run Code Online (Sandbox Code Playgroud)

iis azure url-rewrite-module azure-cdn

3
推荐指数
1
解决办法
2463
查看次数

多个特定主机的 Azure Blob CORS 设置

在 Blob 存储中配置 CORS 的限制让我感到沮丧。

  • 最多 265 个字符
  • 没有通配符主机
  • 最多 5 个 CORS 规则

由于这些限制,我最多只能找到约 48 个主机。

请参阅learn.microsoft.com

对于我的场景(私有 cdn 来服务 js、css、字体等资产),我看不到任何其他使用*for的方法AllowedOrigins这是唯一的方法吗?没有人(没有其他主机)应该能够使用我的许可字体(https://www.viget.com/articles/cors-youre-doing-it-wrong)。

一体化

通配符之类的*.int.any.local.network可能是一个解决方案。

http://brand-AT.int.any.local.network
http://brand-be.int.any.local.network
http://brand-bg.int.any.local.network
http://brand-ca.int.any.local.network
http://brand-ch.int.any.local.network
http://brand-cn.int.any.local.network
http://brand-tr.int.any.local.network
http://brand-cz.int.any.local.network
http://brand-de.int.any.local.network
http://brand-dk.int.any.local.network
http://brand-es.int.any.local.network
http://brand-fi.int.any.local.network
http://brand-fr.int.any.local.network
http://brand-co.uk.int.any.local.network
http://brand-hu.int.any.local.network
http://brand-ie.int.any.local.network
http://brand-it.int.any.local.network
http://brand-nl.int.any.local.network
http://brand-pl.int.any.local.network
http://brand-pt.int.any.local.network
http://brand-ro.int.any.local.network
http://brand-ru.int.any.local.network
http://brand-se.int.any.local.network
http://brand-sk.int.any.local.network
http://brand-tr.int.any.local.network
http://brand-us.int.any.local.network
http://brand-za.int.any.local.network
Run Code Online (Sandbox Code Playgroud)

分期

通配符之类的*.qs.any.dmz.network可能是一个解决方案。

http://brand-AT.qs.any.dmz.network
http://brand-be.qs.any.dmz.network
http://brand-bg.qs.any.dmz.network
http://brand-ca.qs.any.dmz.network
http://brand-ch.qs.any.dmz.network
http://brand-cn.qs.any.dmz.network
http://brand-tr.qs.any.dmz.network
http://brand-cz.qs.any.dmz.network
http://brand-de.qs.any.dmz.network
http://brand-dk.qs.any.dmz.network
http://brand-es.qs.any.dmz.network
http://brand-fi.qs.any.dmz.network
http://brand-fr.qs.any.dmz.network …
Run Code Online (Sandbox Code Playgroud)

azure cors azure-cdn azure-blob-storage

3
推荐指数
1
解决办法
1124
查看次数

在哪里可以找到要在 Microsoft Flow 的 Azure REST API 调用中使用的受众和客户端 ID 字段?

我正在尝试从 Microsoft Flow 调用 CDN Purge 的 Azure REST API url。

  • 我发现 HTTP - HTTP 是使用 Azure 的最佳操作,HTTP 听起来专门用于访问资源而不是(仅)调用。
  • 为此,我在 Azure Active Directory 中创建了一个 Web 应用程序/API 应用程序。
  • API 调用需要进行身份验证,因此我选择了 Active Directory OAuth。
  • 我将租户 ID 填写到租户中,选择“秘密”作为凭证类型,并将应用程序的密码(密钥)放入“秘密”字段中。

但是,我不知道要在“受众”和“客户 ID”字段中输入什么内容。

我尝试搜索文档但没有找到任何相关结果。我认为其中之一应该是应用程序 ID。

受众和客户 ID 字段中应输入什么内容以及如何查找这些值?

是否还需要执行其他操作才能使其正常工作(例如设置允许清除 CDN、更新清单、分配角色的权限)?

PS:我正在进行BadRequest. Http request failed as there is an error getting AD OAuth token: 'AADSTS50105: Application '<appId>' is not assigned to a role for the application '<appIdUri>'.我最近的尝试。

azure azure-cdn azure-active-directory power-automate

3
推荐指数
1
解决办法
2万
查看次数