我在Amazon S3上託管我的圖像,並且只存儲一個圖像大小。如何防止使用Cloudfront插件創建無效URL的Imageresizer?
到目前爲止,我已經成功地使用Imageresizer來調整我的圖像每個請求。
現在我需要介紹Cloudfront CDN,這給我帶來困難。
我已經按照documentation設置了我的配置。
像這樣:
<resizer>
<diskcache dir="~/app_data" autoClean="true"/>
<clientcache minutes="1440"/>
<cloudfront redirectThrough="http://cdn.example.com" redirectPermanent="false"/>
<plugins>
<add name="DiskCache"/>
<add name="ClientCache"/>
<add name="MvcRoutingShim"/>
<add name="CloudFront"/>
</plugins>
</resizer>
我然後捕獲任何網址,以我的應用程序是這樣的:
private static void ImageResizer_OnPostAuthorizeRequestStart(
IHttpModule sender2, HttpContext context)
{
string path = Config.Current.Pipeline.PreRewritePath;
if (!path.StartsWith(PathUtils.ResolveAppRelative("~/cdn/"),
StringComparison.OrdinalIgnoreCase))
{
return;
}
Config.Current.Pipeline.SkipFileTypeCheck = true;
Config.Current.Pipeline.ModifiedQueryString["cache"]
= ServerCacheMode.Always.ToString();
}
這樣Imageresizer能夠處理它們。
當它會改變我的URL中使用正確的CDN路徑,但它也改變了查詢字符串PARAMS以分號:
要這樣:
不幸的是,亞馬遜S3不喜歡這個,並將它踢出了拒絕訪問。不過,亞馬遜會高興地服務於原始查詢字符串。
那麼,我該如何保留查詢字符串以防止Imageresizer將參數更改爲分號?
或配置亞馬遜,以便它將服務圖像,無論分號?
不要使用CloudFront的*,而不是* S3的,你使用他們兩個。您的cloudfront發行版應指向運行ImageResizer的服務器,後者又指向具有S3Reader的Amazon S3。 http://imageresizing.net/docs/cloud –