wwwなしのURLをwww有りのURLにAWSで転送させる(HTTPS対応版)
概要
このブログのURLは「https://www.moyashidaisuke.com」ですが、「https://moyashidaisuke.com/」でもアクセスできるようにAWSで頑張りました。
対応前構成
さくらのDNS -> はてなブログにcnameで転送(www.moyashidaisuke.comのみ)
何がダメ?
↑はてな公式のやり方なのですが、www無しをcnameではてなブログに設定することはDNSのルールとしてできません。
また、はてなブログ側の設定でもできません。自分でどうにかしてね、とのこと。
検討
案1:お名前.comのURL転送サービスを使う
- お名前.comは広告が多くて個人的に好きじゃない、、
- 有料(月100円)
なので微妙。
案2:適当にサーバたてて.htaccessとかでやる
- 転送するためだけのサーバは保守的にあまり立てたくない、、
- 有料なのがほとんど
案3:AWSで頑張る
AWSを嗜むエンジニアなので、AWSでやってみます!(ただの好み)
対応1 HTTP無し版
細かいやり方は↑の方が詳しいので、簡単に。
S3bucket作成
今回は「moyashidaisuke.com」でアクセスした時に、「www.moyashidaisuke.com」にリダイレクトさせたいので、「moyashidaisuke.com」で作成します。
後は適当でOK
S3bucketにリダイレクトを設定
Route53にホストゾーンを作成
ルートドメインの「moyashidaisuke.com」で作成します。
Route53からS3へのルーティング設定
Route53にはてなブログへのルーティング設定
今は「さくらのDNS -> はてなブログにcnameで転送」していますが、
次の手順で「さくらのDNS -> AWS Route53 -> はてなブログにcnameで転送」とするので、あらかじめRoute53にはてなブログへのルーティング設定を追加しておきます。
さくらのDNSからAWS Route53へのルーティング設定
NSレコードで設定します。 Route53にNSレコードが作成されているはずなので、確認してコピっておきます。(人によって違うので各自の環境のを使って下さい)
さくらのDNSに設定します。NSの設定はなぜかWHOIS情報の変更画面にあります。 (さくらのDNSの画面は10年前から時が止まっているのでノスタルジーを感じます。)
しばし待つ
変更に時間がかかるので待ちます。私は12時間くらい待ちました。
動作確認
- はてなブログ(www.moyashidaisuke.com)が正常に表示されること
- ルートドメイン(moyashidaisuke.com)を開いたら(www.moyashidaisuke.com)に転送されること
- ブラウザが勝手に補完する場合があるので、コマンドつかった方が確実
curl --dump-header - moyashidaisuke.com
が、ここでhttpsだとtimeoutになってしまう事が発覚、、、
対応2 HTTPS版
というわけでhttps対応版。
ACMでssl証明書を発行して、S3の手前にCloudFrontを置かないといけない模様。(S3のwebhosting機能にはssl証明書を紐付けられない😇)
ACMでssl証明書を発行
CloudFrontは「バージニア北部」のACMでないと設定できないので注意です。
CloudFront作成
気をつけないといけないのは、「Origin Domain Name」にS3のbucket名が候補で出てくるのですがそれを選んではいけないです。S3のhosting用のエンドポイントURL(XXXXXX.s3-website-XXXXみたいなの)を設定しないと、S3で設定したリダイレクトが効きません。
aliasにはルートドメイン(moyashidaisuke.com)を設定します。
あとはデフォルトでOK
Route53からCloudFrontへのルーティング
AレコードのエイリアスをS3からCloudFrontに変更します。(ちょっと時間経たないと出てこない場合があります)
動作確認
httpの時と一緒!
$ curl --dump-header - https://moyashidaisuke.com HTTP/2 301 content-length: 0 location: https://www.moyashidaisuke.com/ date: Sun, 15 Sep 2019 05:24:41 GMT server: AmazonS3 x-cache: Hit from cloudfront via: 1.1 3713468e68e20152a89ab133cc836321.cloudfront.net (CloudFront) x-amz-cf-pop: NRT12-C3 x-amz-cf-id: 1_-DGqh3gG6VKKEoUmGcziWtdZppFQc8z_waGPaFE5j15oK0DGo5tQ== age: 1000
料金(2019/9/15時点)
S3
ストレージ料金はかからないので無視。 リクエスト回数により重量課金。
だが、1000件あたり0.00037USD で、www無しのリクエストがくる事はほとんど無いはずなので無視できる範囲だと思う。
CloudFront
データ転送量、リクエスト数で従量課金だが、www無しのリクエストがくる事はほとんど無いはずなので無視できる範囲だと思う。多分。
ACM
プライベート CAは使わないので無料。
Route53
ホストゾーンごとに 0.50 USD/月 – 最初の 25 個のホストゾーン
なので、$0.5=55円くらい が必ずかかります。
100 万件のクエリごとに 0.400 USD – 最初の 10 億件のクエリ/月
はてなブログへのアクセス(www.moyashidaisuke.com)も適用されるので、100万PVだったら$0.400= 44円くらいかかります。 1000万PVだと10倍。
まあこのブログはそんな事にはならないと思うので無視できる範囲でしょう、、、
料金まとめ
$0.5は必ずかかる。PVが爆発したら従量課金でもっとかかる。
---- 2020/01/24追記 実際の請求を確認 ----
想定どおりでした。
まとめ
勉強がてらやってみましたが、普通はお名前.comのURL転送サービス使うのが一番楽でコスパも良いと思います😇
S3にACM紐付けられないの不便。(実質publicサービスとして使えないじゃん、、、