我有一个 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 加载字体,我已经尝试了所有应该做的事情。
我错过了什么?