2013-02-02 28 views
1

我在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以分號:

http://example.com/cdn/image.jpg?mode=crop&width=200

要這樣:

http://mycdn.example.com/image.jpg;mode=crop;width=200

不幸的是,亞馬遜S3不喜歡這個,並將它踢出了拒絕訪問。不過,亞馬遜會高興地服務於原始查詢字符串。

那麼,我該如何保留查詢字符串以防止Imageresizer將參數更改爲分號?

或配置亞馬遜,以便它將服務圖像,無論分號?

+0

不要使用CloudFront的*,而不是* S3的,你使用他們兩個。您的cloudfront發行版應指向運行ImageResizer的服務器,後者又指向具有S3Reader的Amazon S3。 http://imageresizing.net/docs/cloud –

回答

1

你使用這兩個不要使用CloudFront的S3代替。您的雲端分佈應指向運行ImageResizer的服務器,該服務器依次使用S3Reader訪問Amazon S3。 CloudFront應該永不直接指向S3;這將消除圖片中的ImageResizer。

http://imageresizing.net/docs/cloud

+0

嗨,我已經意識到,這個cloudfront插件的全部目的是將url改爲我不想要的格式,所以我刪除了它。謝謝。 PS。你知道我在哪裏可以找到一些信息如何將cloudfront指向我的應用程序?乾杯。 – shenku

+0

CloudFront文檔很有幫助。請記住,您正在創建一個下載分發到自定義源服務器,而不是S3存儲桶。 http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CreatingDownloadDistributions.html –