Amazon S3 は、全てのリクエストをリダイレクトや、パスに応じたリダイレクトを設定できる機能を持っています。これは Static Web Hosting
という設定を入れることにより実現可能です。実際の技術詳細については以下の公式ドキュメントを参照してください。
gochiusa.53ningen.com
に対して gochiusa.com
へのリダイレクト設定作業は以下の 3 STEP です
gochiusa.53ningen.com
という名前で作成するStatic Web Hosting
機能を有効にして、すべてのリクエストを gochiusa.com
にリダイレクトする設定を入れるgochiusa.53ningen.com
に対して先ほど作ったバケットへのエイリアスを張る A レコードを作成する作業後、設定を dig で確認します
% dig gochiusa.53ningen.com @ns-771.awsdns-32.net. ; <<>> DiG 9.8.3-P1 <<>> gochiusa.53ningen.com @ns-771.awsdns-32.net. ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23376 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;gochiusa.53ningen.com. IN A ;; ANSWER SECTION: gochiusa.53ningen.com. 5 IN A 52.219.68.26 ;; AUTHORITY SECTION: 53ningen.com. 172800 IN NS ns-1431.awsdns-50.org. 53ningen.com. 172800 IN NS ns-2010.awsdns-59.co.uk. 53ningen.com. 172800 IN NS ns-393.awsdns-49.com. 53ningen.com. 172800 IN NS ns-771.awsdns-32.net. ;; Query time: 59 msec ;; SERVER: 205.251.195.3#53(205.251.195.3) ;; WHEN: Sat Dec 2 02:45:43 2017 ;; MSG SIZE rcvd: 192
解決される 52.219.68.26
は S3 の静的配信サーバーの IP の模様で、振る舞い的には Host
ヘッダと同じ名前を持つ S3 バケットへリダイレクトをかけるという形のようです。それを確認するために次のようなリクエストを送ってみます。
% curl -I 52.219.68.26 HTTP/1.1 301 Moved Permanently x-amz-error-code: WebsiteRedirect x-amz-error-message: Request does not contain a bucket name. x-amz-request-id: C6B9BBFE84DAC0E0 x-amz-id-2: L0Hv8iRFv2kIRyLUUlhre6cqJpGKfdPo+LYF4EfjgcIaA3W4L+TOzVhs+U+H5W/J3NRp4Jfnn2A= Location: https://aws.amazon.com/s3/ Transfer-Encoding: chunked Date: Fri, 01 Dec 2017 17:50:44 GMT Server: AmazonS3
x-amz-error-message: Request does not contain a bucket name.
というメッセージからわかるようにバケットネームの指定がないというエラーで AWS S3 のトップページに飛ばされます。次に Host ヘッダをつけるとどうなるか試してみましょう。
% curl -I -H "Host: gochiusa.com" 52.219.68.26 HTTP/1.1 404 Not Found x-amz-error-code: NoSuchBucket x-amz-error-message: The specified bucket does not exist x-amz-error-detail-BucketName: gochiusa.com x-amz-request-id: DF0A27572D2A69C2 x-amz-id-2: 6PAUKw9BxMEQjZ7ELLQELCOfXdCAMYpQEuH9fN8pdvK3HVCHwUTU3DIZTAaC+vJTevpEsi+jo4I= Transfer-Encoding: chunked Date: Fri, 01 Dec 2017 17:53:07 GMT Server: AmazonS3
The specified bucket does not exist
というエラーメッセージに変わりました。ではそろそろ真面目に先ほど作った gochiusa.53ningen.com
という値を Host ヘッダにつけて叩いてみましょう。
% curl -I 52.219.68.26 -H "Host: gochiusa.53ningen.com" HTTP/1.1 301 Moved Permanently x-amz-id-2: JIFBN5bduooIXFt6ps6DKsGca1jEWKmojrNJqTx+7MPXEBeHUK3A/BMehFQlsjyYRvzgPcZ2U4w= x-amz-request-id: 53093E7405B86943 Date: Fri, 01 Dec 2017 17:54:49 GMT Location: http://gochiusa.com/ Content-Length: 0 Server: AmazonS3
正常に 301 で http://gochiusa.com/
にリダイレクトされていることが確認できました。
Host
ヘッダをみて、対象の S3 静的配信コンテンツへのリダイレクトを行なっている仕組みから生まれる制約だろうということが、上記の実験から分かるgochiusa2.53ningen.com
に対して gochiusa.53ningen.com
を指すような CNAME レコードセットを作ると以下のような実験結果になる% dig gochiusa2.53ningen.com @ns-771.awsdns-32.net. ; <<>> DiG 9.8.3-P1 <<>> gochiusa2.53ningen.com @ns-771.awsdns-32.net. ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2232 ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;gochiusa2.53ningen.com. IN A ;; ANSWER SECTION: gochiusa2.53ningen.com. 300 IN CNAME gochiusa.53ningen.com. gochiusa.53ningen.com. 5 IN A 52.219.0.26 ;; AUTHORITY SECTION: 53ningen.com. 172800 IN NS ns-1431.awsdns-50.org. 53ningen.com. 172800 IN NS ns-2010.awsdns-59.co.uk. 53ningen.com. 172800 IN NS ns-393.awsdns-49.com. 53ningen.com. 172800 IN NS ns-771.awsdns-32.net. ;; Query time: 120 msec ;; SERVER: 2600:9000:5303:300::1#53(2600:9000:5303:300::1) ;; WHEN: Sat Dec 2 03:10:55 2017 ;; MSG SIZE rcvd: 216 % curl -I 52.219.68.26 -H "Host: gochiusa2.53ningen.com" HTTP/1.1 404 Not Found x-amz-error-code: NoSuchBucket x-amz-error-message: The specified bucket does not exist x-amz-error-detail-BucketName: gochiusa2.53ningen.com x-amz-request-id: 294AEC84E239A2AC x-amz-id-2: VAWMR0xq0Gw1cJOdipIgJBRsx6RMYaaP679GD/hKomU3yOFJ6m7/n62h9wraTQoirBYKofnO2WM= Transfer-Encoding: chunked Date: Fri, 01 Dec 2017 18:04:22 GMT Server: AmazonS3
ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです