SITECORE MANIA 技術ブログ

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

新藤

新藤

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" />

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

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

お問い合わせ・資料請求

LYZONにご相談下さい

ご依頼ご質問等まずは私達にお気軽にご相談下さい。

お電話でのお問い合わせ

03-5803-0587平日9:00~18:00