只是为了让人们知道,我确实按照一些人的建议稍微编辑了这个帖子,这个问题已经发布在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美元/ …
我将新内容上传到CDN时需要刷新内容.当内容发生变化时,更新数据立即可用非常重要.但是CDN缓存并没有立即反映出来.
我提到网站' https://msdn.microsoft.com/en-us/library/mt634451.aspx '并试图实现相同的功能.但是,当我试图点击它时,我得到授权错误.
{"error":{"code":"AuthenticationFailed","message":"身份验证失败.'授权'标头丢失." }}
但是文章没有提供有关需要进入Authorization标头的信息.有人请帮助我,如何构建此授权标题?如果您需要更多详细信息,请告诉我.
注意:我检查了SO帖子' 如何强制清除或无效Azure CDN内容?'它确实提供了msdn链接的链接(与上面相同),但没有关于授权标题的链接.
我有一个连接到blob存储的Azure CDN(Verizon,premium).根据本教程中的第6步,我有2条规则.这些规则旨在强制CDN在调用CDN的根目录时提供"index.html".它们可能与问题相关,也可能不相关,但步骤6中描述如下:
我最初上传文件到blob存储,能够通过CDN点击它们(证明上述规则正常工作),然后更改本地文件(调试)以上传到blob存储.更新blob存储上的所有文件并选中"purge all"选项后手动清除CDN端点后,CDN将为旧文件提供服务,并在直接访问blob存储时提供新文件.这似乎发生在每个文件中(即使直接命中文件,而不仅仅是index.html).等待~10小时后,仍然会发生这种情况,清除浏览器缓存,并尝试从未用过访问CDN的浏览器.
有谁知道可能会发生什么?它是否缓存在我的网络和CDN端点之间?我觉得我可能会错过很简单的东西......
编辑1:我有另一个Verizon(非高级)CDN连接到同一个存储容器,它在清除后获取正确的文件; 然而,即使是现在(24小时后),高级CDN也没有提供更新的文件.
编辑2:称为微软对Azure的支持,他们花了大约6个小时进行调查,但没有成功.我们最终再次尝试清除,现在正在发送更新的文件.仍然不确定问题是什么.
我使用Azure Verizon CDN从Blob存储发布我的Web应用程序(SPA).我已成功设置自定义域和SSL.我在CDN中添加了一个重写规则,以重定向到默认文档index.html.基本上,这会接收传入的请求,并在URL路径和任何查询字符串之间插入"index.html".所以
mydomain.com/startup去吧mydomain.com/startup/index.html
mydomain.com/homepage 去 mydomain.com/homepage/index.html
然后
mydomain.com/showuser/?userId=xxxxx去mydomain.com/showuser/index.html/?userid=xxxxx
一切似乎都运作良好.
SPA使用的地址栏中的URL从不请求实际文件,但默认文档index.html中的代码确实如此.这些文件请求都是404失败的,因为我猜重写规则也是这样做的.
如果URL包含文件名,我想要的是一些不执行URL重写的方法.规则引擎阻止我在使用URL重写功能时添加这样的条件 - 显然,在尝试使用URL重写功能时,您无法在URL上使用任何匹配条件.
我们想在 Azure 中实现缓存有两个主要原因:
以下是我们计划缓存的数据的特征:
出于这个特定目的,表存储似乎比 Blob 存储更好(我们只是为图像、CSS 和 JavaScript 实现了 Blob 存储)并且Windows Azure 缓存似乎比 Windows Azure 共享缓存更好(也许几乎总是更好,共享缓存主要是遗留的功能在这一点)。
两者的编程 API 看起来都很简单。与我们为云站点支付的费用相比,每个站点的成本似乎可以忽略不计。
到目前为止,由于我们认为 Azure 缓存的优缺点,我们倾向于使用表存储。作为 .Net 老手,我们对内存缓存比 NoSql 风格的解决方案更熟悉:
Windows Azure 缓存的问题:
Windows Azure 缓存的优势
如何在不停机的情况下触发 Azure CDN 从 Key Store 读取最新版本的自定义证书?
我的 CDN 设置工作正常,但鉴于 Let's Encrypt,证书寿命很短,需要自动化更新。这样做az keyvault certificate import是对Azure的CLI小事足以证书更新为重点库,但接下来呢?如何告诉 Azure CDN 开始使用新版本的证书?
az cdn custom-domain enable-https在已启用 HTTPS 的域上运行。结果:内部配置错误和几个小时的停机时间,首先禁用自定义域然后启用它。不过,证书已更新。自定义域证书版本的 Azure 门户工具提示显示“选择要使用的证书版本。默认情况下,我们将使用最新版本。 ” 创建终结点时确实如此,但如何开始使用最新版本?已经从下拉列表中选择了最新版本,但我确实选择了以前的版本并选择了最新版本。这样做启用了“保存”。
保存表单导致证书的无停机更新。不错,但考虑到自动化和脚本编写,并不是真正可行的方法。
Start-AzCdnEndpoint/ Stop-AzCdnEndpointcmdlet。也许有帮助,但 100% 保证会产生停机时间。我可以在下一个更新周期尝试什么吗?
我主要通过遵循 Microsoft 教程在 azure 中托管了一个静态网站。该过程是创建存储帐户、创建 CDN 终结点、将自定义域映射到终结点,然后使用 azure 管理的 SSL 证书启用 HTTPS。
自定义域正在工作,但问题首先是,尽管在 Azure CDN 中它表示启用了 HTTP 和 HTTPS,但我只能通过 HTTPS 访问网站,当我尝试使用 HTTP 时,收到的错误是“正在访问的帐户没有” '不支持HTTP'。另一件事是,为了导航到安全站点,我必须将整个 URL 放在搜索栏中,以 https 开头,否则无法找到该网站。我不确定这是否正常,但如果我考虑一般的网页浏览,这通常是没有必要的。
任何有关如何解决此问题的想法将不胜感激。
我在我的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) 在 Blob 存储中配置 CORS 的限制让我感到沮丧。
由于这些限制,我最多只能找到约 48 个主机。
对于我的场景(私有 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) 我正在尝试从 Microsoft Flow 调用 CDN Purge 的 Azure REST API url。
但是,我不知道要在“受众”和“客户 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>'.我最近的尝试。