mod_rewriteを使ってAmazon S3のコンテンツを表示させる
自分で立てたWebサーバから静的コンテンツ(index.html等)を配信していた形を、元々のWebサーバのURLは変えずに、Amazon S3から配信させてみます。(事前にAmazon S3の該当バケットにindex.html等のコンテンツをアップしておきます。)
今回は、Amazon LinuxでApache HTTP Serverで試しました。
まずは、Apacheをインストール、起動します。
sudo yum install -y httpd sudo service httpd start
適当なindex.htmlファイルを/var/www/html以下に作成します。
動作するサーバにアクセスすると
curl http://ec2-xx-xx-xxx-xxx.ap-northeast-1.compute.amazonaws.com (自分で立てたサーバ上のコンテンツが表示)
次に、/etc/httpd/conf/httpd.confの中身を見て、mod_rewriteがロードされていることを確認します。
LoadModule rewrite_module modules/mod_rewrite.so
続けて、/etc/httpd/conf/httpd.confの中に以下を追記します。
<VirtualHost *:80> DocumentRoot /var/www/html ServerName ec2-xx-xx-xxx-xxx.ap-northeast-1.compute.amazonaws.com RewriteEngine On RewriteRule ^/(.*)$ http://xxxxx.s3-website-ap-northeast-1.amazonaws.com/$1 [P,L] </VirtualHost>
※上記例では、S3のWebサイトホスティングのURLに直接変更させています。
その後、Apacheを再起動して
sudo service httpd restart
同様にアクセスする。
curl http://ec2-xx-xx-xxx-xxx.ap-northeast-1.compute.amazonaws.com (xxxxx.s3-website-ap-northeast-1.amazonaws.com/index.htmlの内容が表示される)
httpd.confのRewriteRuleで末尾の[P,L]にしておくと、URLはec2-xx-xx-xxx-xxx...のままで、S3の画像を表示させます。末尾を[R,L]にすると、S3のURLにリダイレクトされました。
リダイレクト先のドメイン名は元々のS3のものを使っていますが、これをRoute 53等のDNSでカスタムドメインを登録して、カスタムドメインでS3へアクセスさせることも勿論できます。
この方法を使えば、アプリ側を特に修正を入れずに、URLにマッチした場合にS3の画像を表示させることができそうですね!(勿論rewriteさせる形ではなく、アプリ側を修正させる方が望ましいですけども。)