如何使用创建无效网址的Cloudfront插件阻止Imageresizer?

时间:2013-02-02 03:58:40

标签: amazon-s3 amazon-cloudfront imageresizer

我在Amazon S3上托管我的图片,只存储一个图像尺寸。

到目前为止,我已成功使用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>

然后我会抓住我的应用程序的任何URL:

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路径,但它也会将查询字符串参数更改为分号:

  

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

对此:

  

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

不幸的是,亚马逊S3并不喜欢这样,并将其作为拒绝访问。然而,亚马逊很乐意为原始查询字符串提供服务。

那么,如何保留查询字符串以防止Imageresizer将参数更改为分号?

或者配置亚马逊,以便无论分号如何都能提供图像?

1 个答案:

答案 0 :(得分:1)

您不使用S3的CloudFront 您同时使用它们。您的cloudfront分发应指向运行ImageResizer 服务器,然后使用S3Reader访问Amazon S3。 CloudFront应永远直接指向S3;这将消除图片中的ImageResizer。

请参阅http://imageresizing.net/docs/cloud