AWS S3の静的サイトホスティングでwwwありからなしへリダイレクトする。httpもhttpsも
やりたいこと
S3の静的サイトホスティングで、以下のようにしたかった。
http://www.example.com→https://example.com
https://www.example.com→https://example.com
http://example.com→https://example.com
要は、wwwありもなしも、httpも全てhttps://example.comへリダイレクトしたい。
遭遇した問題
AWSのチュートリアルを進めていくと、http://www.example.com→http://example.comへの方法は指南してくれる。
進めていくと、httpsの導入も説明してくれるが、なぜか
http://www.example.com→https://example.com
https://www.example.com→https://example.com
は指南してくれなくなる。そりゃないよAmazonさん…
仕方なく外部の記事で調べる。
https://www.example.com→https://example.comは成功する。
しかし、http://www.example.com→https://example.comが実装できない。漏れてる。
解決策
色々試してみて問題を解決できたので、メモ。
前提として、S3のバケットでwwwありとなしは2つ作成しているとする。
リダイレクト元のバケットには、リダイレクト処理は記述済み。
ちなみに、プロトコル部分はhttpsでもhttpでも大丈夫っぽい。
この時に、リダイレクト元のパケットウェブサイトエンドポイントをコピーしておく。
CloudFrontでディストリビューションを作成
ここがつまずきポイント。
ディストリビューションは、wwwありとなしを二つ作成する。
リダイレクト元のディストリビューション(wwwあり)は、オリジンとオリジングループの箇所はリダイレクト元のエンドポイントをペーストする。
さっきS3の部分でエンドポイントをコピーしたのはこのため。
と外部の記事の説明はこうあるが、これで成功のように思う。
が、肝心のhttp://www.example.com→https://example.comが漏れてる。
解決策としては、リダイレクト元のディストリビューションのビューワプロトコルポリシーをHTTP and HTTPSに設定する。
ここで、Redirect HTTP to HTTPSを選んでしまうと、http://www.example.com→https://www.example.comのようにwwwありのhttp→httpsにリダイレクトするだけになってしまうのでハマってしまう。
なお、設定がうまくいったかどうかはブラウザではなくターミナルから確認するのがいい。
curl -I http://www.example.com
ブラウザだとキャッシュの関係で反映を確認できないことがある。
301リダイレクトで遷移先がhttps://exampl.comならOK
プログラミング独学のおすすめ本
アメリカにて独学でプログラミングを学ぶ方法を紹介しているジョン・ソンメズ氏による翻訳本。
どのようにプログラミングを独学で勉強していくかのロードマップが詳しく記載されています。
ソフトウェア開発者のキャリアについても言及されているので、プログラミング初心者以外の人にもおすすめ。