mod_rewriteを使って画像のみCloudFront経由で配信する設定

CloudFrontを導入する際にCNAMEを付けて、該当FQDN全てCloudFront経由の配信にする方法が一般的かと思いますが、今回は画像やjsなど特定ファイルのみCDN対象としたかったので、その設定方法をメモ。

Apachemod_rewriteを使い、下記のように設定

RewriteCond %{HTTP_HOST} ^example\.com$
RewriteCond %{HTTP_USER_AGENT} !^Amazon\ CloudFront$
RewriteRule ^(.*)\.(png|js|jpg|gif|ico)$ http://xxxx.cloudfront.net/$1.$2 [NE,R=302,L]

これで、example.comにアクセスすると、画像やjsのみxxxx.cloudfront.netにリダイレクトされてCloudFrontから配信されます。
重要なのは2行目のユーザエージェントで、これが無いとCloudFrontから画像を取得しにきた時にリダイレクトループが起こります。
1行目にホスト名を指定して限定しているのは、ステージングサイトなどで動作しないようにするためです。

この方法だと、最初にオリジンサーバにHTTPリクエストが来てリダイレクトのレスポンスを返すため通常のCDNよりは非効率ですが、そこはデータ量が少ないので無視できるとしました。
この方法だと、いざというときにmod_rewriteコメントアウトしてCloudFrontを簡単に切り離せますし。