1

我有一个 Azure 存储帐户,CDN 设置有 5 个指向存储帐户的子域(cdn1.domain.com、cdn2.domain.com、--cdn5.domain.com)。

我使用 W3 Total Cache 插件来提高性能,尤其是在 Azure CDN 上托管静态文件。该插件可以很好地上传所有文件,并且该站点可以访问图像、css、脚本等……没问题。但是,字体不会加载。

得到以下错误:

来自“ http://cdn1.domain.com ”的字体已被跨域资源共享策略阻止加载:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问来源“ http://domain.com ”。

wordpress 站点托管在 DigitalOcean 上,在 Ubuntu 14.0.4 上使用 Apache。我在 apache2.conf 中添加了以下内容:

<FilesMatch ".(eot|ttf|otf|woff)">
    Header set Access-Control-Allow-Origin "*"
</FilesMatch>

那没有用。经过一些研究,Azure 似乎默认不允许 CORS,所以我创建了一个小 C# 应用程序来更改我的存储帐户上的 CORS 规则,如下所示:

var storageAccount =
    new CloudStorageAccount(
        new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials("accountname", "accountkey"), true);
var blobClient = storageAccount.CreateCloudBlobClient();
var blobServiceProperties = new ServiceProperties
{
    HourMetrics = null,
    MinuteMetrics = null,
    Logging = null,
};
blobServiceProperties.Cors.CorsRules.Add(new CorsRule
{
    AllowedHeaders = new List<string> { "*" },
    AllowedMethods = CorsHttpMethods.Get,
    AllowedOrigins = new List<string> { "*" },
    ExposedHeaders = new List<string> { "*" },
    MaxAgeInSeconds = 3600 // 30 minutes 
});

blobClient.SetServiceProperties(blobServiceProperties);

这基本上应该向所有来源开放存储......但仍然会出现相同的错误。所以我想也许它是某种缓存。所以我将所有文件重新上传到同一个容器,然后等了大约 6 个小时。

错误仍然存​​在。我觉得为了从 Azure CDN 加载字体,我已经尝试了所有应该做的事情。

我错过了什么?

4

1 回答 1

0

默认情况下,大多数 CDN 的 CORS 仅适用于为 Access-Control-Allow-Origin 标头设置通配符的情况。通配符的作用是因为 CDN 将缓存它获得的第一个请求的响应。对于客户需要允许特定来源的情况,通常需要在 CDN 上设置其他配置以启用此功能。从今天通过 Azure 管理门户提供的 Azure CDN 功能,您需要为 CDN 端点启用查询字符串设置,然后对来自每个允许域的请求使用唯一的查询字符串。启用查询字符串设置将导致 CDN 为每个唯一查询字符串缓存一个单独的对象。对于 Azure CDN 的非常大的客户,有一个具有更复杂功能的补充门户 - 但它目前仅适用于有限数量的客户。

于 2014-10-02T04:14:00.700 回答