Amazon S3とmod_proxyでクロスドメインとか

できるのは、わかってたんですけど、一応テストしたのでご紹介を。

mod_proxyでクロスドメイン制約を回避

.htaccessに以下のような内容を記述して、FlashやAjaxのクロスドメイン制約を回避できるかどうかをテストした。

RewriteEngine on
RewriteRule ^uploads/(.*) http://xxxx.s3.amazonaws.com/$1 [P]

結果は良好。

期待通りに外部サーバのswfやXMLを読み込むことができました。。

予想通り、若干重かったのですがCloudFrontとmod_cacheを組み合わせればこの部分は改善できそうです。

CloudFrontを使うには、2行目のURLをxxxxx.croudfront.netのように書き換えればOKです。

S3では認証パラメータをURLに渡すこともできるようなので、もしかしたらそうした方がいいのかもしれない。

Amazonのエラーを見れないようにする

Amazon S3では、HTTPエラーはXMLがかえされるので、これは表示したくない。

ProxyErrorOverride On

httpd.confに上記の記述を入れたら、解決できた。

つづいてmod_cache

以下のような内容をhttpd.confに追加した。

<VirtualHost>
--中略--
    CacheRoot /path/to/cache
    CacheIgnoreCacheControl On
    CacheEnable disk /uploads/
    CacheMinFileSize 0
    CacheMaxFileSize 64000
    CacheDirLevels 5
    CacheDirLength 3
--中略--
</VirtualHost>

/path/to/cache内をのぞいたら意味不明なディレクトリができていたので、成功した模様。
詳細は後日確認する。

ちなみに、テストしたサーバーはmod_ruidを導入しているので、このキャッシュのオーナーもそこで指定したユーザーになっていた。(これ、本当におすすめです。)

初期費用ゼロで大規模分散ストレージをゲット

この方法の最大のメリットは、初期費用をかけることなく、ほぼ無制限に大容量の信頼性の高いストレージが入手できたことです。

ブログなどのサービスを立ち上げる場合に、どうしてもストレージまわりにコストがかかってしまいます。

バックアップの心配も容量の心配もしなくていい時代がこんなに早くくるなんて。。。