0

私は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が表示されます。

4

1 に答える 1

2

Amazon S3 は、米国以外の地域で最適なパフォーマンスを確保するために、サブドメイン アドレス方式を使用することを提案しています。

そのため、バケット名にピリオドや先頭のダッシュを含めることはできません (ただし、ダッシュを埋め込むことはできます)。

AmazonS3BucketName の値が「media.domain.com」であると仮定すると、これがイメージ ルックアップの失敗の理由になります。

S3Reader プラグインのドキュメント ページの下部にあるバケットの命名に関する注意事項を参照してください。

于 2013-02-06T09:41:54.603 に答える