SITECORE MANIA 開発者向け技術ブログ

パフォーマンス・チューニング

新藤

新藤

Amazon CloudFront + Sitecore の設定

今回はAWSのCloudFrontを使用したSitecoreサイトの設定の仕方を紹介します。
※CloudFrontの詳しい説明は割愛させてもらいます。

まず、CloudFrontがキャッシュする時間はデフォルトの設定ではHTTPヘッダーのCache-Controlのmax-ageの値を参照します。
IISではmax-ageはデフォルトでは7日間に設定されているので、これを変更する手順は以下の通りです。

1.IISマネージャーを起動し、サイトの「HTTP 応答ヘッダー」を選択する
050_1

2.サイドの「共通ヘッダーの設定…」を選択し、「失効までの期間」を設定する
050_2

この方法で静的なファイルのキャッシュの設定は完了ですが、Sitecoreのメディアライブラリに登録したファイルのキャッシュ時間は変更されません。
そこでカスタムのメディアヘッダークラスを作成し、適用する必要があります。
適用する手順は以下の通りです。

1.カスタムのメディアヘッダークラスの作成

public class CloudFrontMediaRequestHandler : MediaRequestHandler
{
    ///
    /// This code is a complete copy of the original code, but SetExpires is removed.
    ///
    protected override void SendMediaHeaders(Media media, System.Web.HttpContext context)
    {
        DateTime date = media.MediaData.Updated;
        if (date > DateTime.Now)
            date = DateTime.Now;
        HttpCachePolicy cache = context.Response.Cache;
        cache.SetLastModified(date);
        cache.SetETag(media.MediaData.MediaId);
        cache.SetCacheability(Settings.MediaResponse.Cacheability);
        TimeSpan delta = Settings.MediaResponse.MaxAge;
        if (delta > TimeSpan.Zero)
        {
            if (delta > TimeSpan.FromHours(12.0))
                delta = TimeSpan.FromHours(12.0);
            cache.SetMaxAge(delta);
            //cache.SetExpires(DateTime.Now + delta);   // This shouldn't be here.
        }
        Tristate slidingExpiration = Settings.MediaResponse.SlidingExpiration;
        if (slidingExpiration != Tristate.Undefined)
            cache.SetSlidingExpiration(slidingExpiration == Tristate.True);
        string cacheExtensions = Settings.MediaResponse.CacheExtensions;
        if (cacheExtensions.Length <= 0)
            return;
        cache.AppendCacheExtension(cacheExtensions);
    }
}

2.Web.configの修正

<!--<add verb="*" path="sitecore_media.ashx" type="Sitecore.Resources.Media.MediaRequestHandler, Sitecore.Kernel" name="Sitecore.MediaRequestHandler" />-->
<add verb="*" path="sitecore_media.ashx" type="YourNamespace.CloudFrontMediaRequestHandler, YourAssembly" name="Sitecore.MediaRequestHandler" />

これで、メディアライブラリのファイルもキャッシュ時間を変更することができます。



※エントリーの内容・画像等は、公開時点での情報に基づきます。
※Sitecoreのバージョンによって実装されている機能が異なります。

この記事を読んだ人はこちらの記事も読んでます

Sitecore導入に関するご相談・資料ダウンロード

導入をご検討・ご依頼の方や、サービスについてご不明点がございましたらお気軽にお問い合わせください。

Sitecoreの運用問題を解決する

既にSitecoreを導入しているお客様向けサービス