私はImageResizerでS3Readerプラグインを使用して、Amazonからサイズ変更された画像を読み取り配信しています。
実稼働環境で動作させるのに問題があります。これは主に、内部で何が起こっているのかがわからないためです。
かなりのログを追加しましたが、期待される画像をリクエストすると、ImageMissingイベントが発生していることがわかります。
そこにある画像のURLを手動で確認すると、S3Readerプラグインを介したImageResizerの処理のどこかで考えられる唯一のことはありますか?
では、ImageResizerがAmazonに画像をリクエストするために使用しているURLをどのように確認できますか?
私のバケットはAisaPacリージョンにあるため、どういうわけか正しいURLを使用していないのではないかと思います。
注意すべき点として、私はmedia
サブドメインで画像のみを処理し、URLを書き直します(これも影響を与える可能性がありますか?)
従うべき私のコードと設定:
<resizer>
<diskcache dir="~/app_data" autoClean="true" />
<clientcache minutes="1440" />
<plugins>
<add name="MvcRoutingShim" />
<add name="S3Reader" buckets="media.domain.com" useSubdomains="true" />
<add name="DiskCache" />
</plugins>
</resizer>
private static void ImageResizer_ReWrite(IHttpModule sender, HttpContext context, IUrlEventArgs args)
{
string subDomain = context.Request.Url.SubDomain();
if (string.IsNullOrWhiteSpace(subDomain) || subDomain != AppSettings.MediaSubDomain)
return;
args.VirtualPath = string.Format("/s3/{0}", AppSettings.AmazonS3BucketName) + args.VirtualPath;
Logger.Error("New VirtualPath: " + args.VirtualPath);
}
private static void ImageResizer_OnPostAuthorizeRequestStart(IHttpModule sender2, HttpContext context)
{
var subDomain = context.Request.Url.SubDomain();
if (string.IsNullOrWhiteSpace(subDomain) || subDomain != AppSettings.MediaSubDomain)
return;
Config.Current.Pipeline.SkipFileTypeCheck = true;
Config.Current.Pipeline.ModifiedQueryString["cache"] = ServerCacheMode.Always.ToString();
Logger.Error("ImageResizer Process: " + context.Request.RawUrl);
}
デバッグトレースに警告やエラーはありません。イメージが返されることを期待すると、404が表示されます。