CDNを使用することで画像ファイル等のリソースファイルの取得処理のレスポンスの高速化とWebサーバーの負荷を軽減させることができることが期待できます。どれくらい効果があるかはもちろんサイトの特性やインフラ環境などに依存します。もちろん、CDNを利用してもメインのページのリクエスト処理が遅ければ大きな効果はないこともあり得ます。

今回は Sitecore で管理されているサイトでメディアライブラリ上で管理されている画像等のデータの取得を CDN 経由で行わせる方法の案をいくつか記載してみます。。

覚書のテスト環境は 次の通りです。

  • Sitecore 7.2 Update 1

1. MediaProviderのGetMediaUrlを継承する

もっとも王道でコーディングが必要な方法は、 MediaProvider を継承する方法になります。MediaProvider の GetMediaUrl(MediaItem item, MediaUrlOptions options) をオーバーライドし、メディア取得用のURLのパスを変更し、 CDN サーバーの名前を含めたURLになるようにします。カスタムのMediaProvider を使用するように Web.config を修正します。当然ですが、Web.configの修正は CD環境にのみ適用するようにします。MediaProviderを継承する方法に関しては下記SDNのURLも参考になります。

Changing media URLs in Sitecore 6
http://sdn.sitecore.net/scrapbook/changing%20media%20urls%20in%20sitecore%206.aspx

画像アイテムがパブリッシュされたときに新しい画像がすぐに表示されるようにするには、例えば画像のバージョンや最終更新日がGetMediaUrlから返されるURLのクエリパラメターに含まれるようにするなどの配慮が必要になります。そうしないと CDNサーバーのキャッシュの有効期限が切れるまで古い画像がブラウザーに返されることになります。もちろん、CDNサーバーがクエリーパラメーターを使用する動的URLに対応している必要があります。

2.URL書き換えモジュールを使用する

IISのアドオンであるURL書き換えモジュールをIISにインストールして、マークアップ送信時に imgタグのsrc属性を書き換えます。必要に応じて他のタグも書き換えます。

URL書き換えルールは例えば下図のように送信時の書き換えルールを作成します。下図では送信時に img タグの src の文字列が メディアアイテムのURLのプリフィクスに一致していた場合CDNサーバー名をつけたURLに置き換えるようにしています。

IIS Manager 上で設置を保存すると次のように URL に 書き換えルールが保存されます。

        <rewrite>
            <outboundRules>
                <rule name="test" patternSyntax="Wildcard" stopProcessing="true">
                    <match filterByTags="Img" pattern="/~/media/*" />
                    <action type="Rewrite" value="http://cdn.server.net/~/media/{R:1}" />
                </rule>
            </outboundRules>
        </rewrite>

 

書き換えルールに関しては CDNの仕様に合うように適宜変更してください。また、URL書き換えを使用する方法では画像が新しく更新されパブリッシュされた場合もCDN上のキャッシュの有効期限が切れるまでブラウザーに返される画像が新しい画像にならないという制限も理解しておく必要があります。

3.Marketplace にある Sitecore CDN Conectorを使用する

Sitecore Marketplace に Sitecore CDN Connectorというモジュールが公開されています。本モジュールを使用すると CDN対応が簡単に行えるようになります。本モジュールは ブラウザーに返される メディアアイテムのURLに自動的に   タイムスタンプとバージョン番号のクエリパラメタを付与してくれるので、CDNがクエリパラメーターを使用する動的なURLに対応している場合は 画像がパブリッシュされたタイミングですぐに新しい画像ファイルがブラウザーに表示されるようにできます。セットアップ方法などの手順やモジュールのダウンロードに関しては下記URLを参照してください。

Sitecore CDN CONNECTOR
http://marketplace.sitecore.net/en/Modules/Sitecore_CDN_Connector.aspx

現時点で CMS 6.5 まで対応しているようなので、使用される Sitecore のバージョンで使用できるかどうかは十分に事前に検証をする必要があります。

4.まとめ

簡単ですが説明は以上です。CDNに対応する方法として3種類の方法を記載してみました。 CDNに対応するには CDN側の仕様にも依存しますので、要件にあった方法を使用していただければと思います。