IFRAMEなどで、ユーザーが直接コンテンツを埋め込むようなサービスの場合、
サービスを提供しているサーバーがダウンしてIEのエラー画面になってると、
随分かっこ悪いことになってしまう。
第一、信用が落ちる。

僕の運営しているところで言うと、うりぼう15パズルとか、箱庭ノベルズがそれ。

もちろん専用サーバーで冗長化とかできれば、それに越したことはないけど、
そんな予算も無いので、せめて、サーバーがダウンした時は、
「ただいまメンテ中」くらいの表示をしたいもの。

そこで、Amazon S3のバーチャルホストとしての機能を利用し、
外部に埋め込まれるものは、Amazon S3につなげて、
そこから実際のサービスURLにリダイレクトするようにしてみた。

ご存知の通り、Amazon S3は
Amazonのサーバーと同等の可用性(99.99%)があるので、
もしサービスを提供しているサーバーがダウンしたら、
S3のファイルを書き換えて、「メンテ中」と表示したりとか、
ミラーサイトがあればそちらへ飛ばすことにする。

さて、具体的には以下の通り。

まずドメインに、S3に通じるホストを設定する。

proxy IN CNAME s3.amazonaws.com.

(例えばドメインがhakoniwa.netの場合)
これで、proxy.hakoniwa.netがS3を向いた。

次にS3内にproxy.hakoniwa.netというバケットを作る。

そこがproxy.hakoniwa.netのDocumentRootになるので、
後はそこにリダイレクト用のhtmlを置いておく。
Javascriptの場合は

location.replace('http://~');

みたいにしとく。
METAタグのRefreshなんかでもいい。
location.hrefを使うと、ブラウザの戻るボタンを押したときに
戻る→リダイレクト、が繰り返されてしまうので注意。
今回はクエリーも渡したいので、ハッシュを使ってみる。

location.replace('http://novel2.hakoniwa.net/load?' + location.hash.substr(1));

で、公開するURLはこんな感じ。

http://proxy.hakoniwa.net/novel2.html#id=771960758b164c5117edd51754ee30b5

これでOK。novel2.hakoniwa.netが死んだら、このhtmlを書き換えてしのぐ。

なお、これらの方法はたぶんリファラが残らないので、
その辺のアクセス解析をしたい場合は、このhtmlに仕込む必要がある。

料金はと言えば、上記程度のhtmlなら5~600バイトなので、
2,000,000アクセスで約20円くらい。
ほとんど無料と言ってよい。

再度書くけど、これは専用サーバーとか用意できるならほとんどいらない。
そこまでできないレンタルサーバー派な方向け。

ほとんど気休めだけど、サーバーの復旧に時間がかかってる時など
ジリジリしてるよりは、少しはマシかと思う。

関連記事:
Amazon S3 メモ
Amazon S3を使ってみた結果のメモ
Amazon S3 料金体系変更(75%の人にとっては値下げ)