EC-CUBEの動的ページをCloudfrontでキャッシュする

  • EC-CUBE4系
投稿日:2026/01/05

概要


EC-CUBE4系ではフロントコントローラー形式になっているため、様々なURLを作成することができます。
例えば、CSVファイルやXMLファイルの実体ファイルがなくてもhttps://example.com/sitemap.xmlといった拡張子のついたURLを作成できます。
内部的には動的にCSVやXMLの内容を作成・表示し、あたかも実体があるように振る舞っています。しかし、出力する内容によっては負荷対策でキャッシュしたい場合があります。一定期間同じ内容が表示されていても問題ない場合です。
そういった場合の対策の一つとしてCloudfrontのキャッシュを利用する方法を取り上げます。

例としてEC-CUBE4.1で追加されたsitemap.xmlをキャッシュする方法を取り上げます。
特に商品用のサイトマップは出力時に時間がかかりキャッシュを考えるケースがあります。


対象


サイトの構成にCDNとしてAWS Cloudfront使っている場合が対象です。
またCloudfrontを使ってキャッシュ設定を行ったことがある人を対象にしています。それで基本的な設定などは記載していません。


Cloudfrontによるキャッシュ設定


sitemapを対象にする
sitemapは以下の4種類あるので、/sitemap*.xmlというパスパターンにて設定します。
・/sitemap.xml
・/sitemap_page.xml
・/sitemap_category.xml
・/sitemap_product_1.xml
※ sitemap_productは商品数が増えるとそれに応じて増えていきます。

TTLの設定に注意する
max-ageより最小TTLが大きくなるように設定します。そうすると最小TTLで設定した期間でキャッシュされます。

以下の理由のため、max-ageの値を確認してCloudfrontの最小TTLと最大TTLを設定していきます。
・Cloudfrontのキャッシュ期間にはHTTPヘッダーのCache-Control: max-ageの情報が関係します。
※ 詳しくはAmazon CloudFrontの公式のドキュメントを御覧ください。
・EC-CUBEが動的に出力するページはmax-ageが設定されています。

TTLの設定の例
max-ageを0、Cloudfrontの最小TTLを43200(12時間)、最大TTLを86400(1日)と設定した場合、最小TTLの12時間のキャッシュになります。
※ 数時間や半日などキャッシュする目的に合わせて最小TTLを設定します。

設定の確認方法について
例えば、ブラウザでサイトマップにアクセスしてサーバーにアクセスが来るかどうかで確かめます。
Cloudfrontのキャッシュ設定がうまくいくと、1度目はアクセスが来ますが、それ以降キャッシュされている間のアクセスはサーバー側にきません。
それで設定確認の際は例えば以下のようにすることで設定がうまくいっているかを確かめることができます。
1. apacheのログを監視
2. Cloudfrontでは最小TTLを十数秒程度の少ない秒数に設定
3. ブラウザでアクセスする
4. 設定秒数の間はサーバーにアクセスが来ていないことを確認する

上記で設定が効いていることを確認し、本来設定したい秒数で最小TTLを設定します。


※ ご参考にされる場合は十分に確認をお願いいたします。
※ ご利用にあたって生じた損害について一切の責任を追わないものとします。
関連カテゴリ