ApacheにはVirtualHost(バーチャルホスト)というホストベースの設定があります。
これは、httpリクエストの、hostヘッダーを読み取って、httpレスポンスを返すという仕組みです。
AWSのALBのHostベースの設定もvhostと同じ仕組みかどうか確認しました。
レジュメ
環境・前提条件
- サーバーとしてAWSのALB(Application Load Balancer)
- クライアントとしてWindows Server 2016 EC2
を使用し、確認しました。
結論、httpリクエストのHostヘッダーを使用した検証方法にはhostsでのテストが有効
vhostをhttリクエストで簡単に挙動確認をするにはクライアントのhostsファイルを使用すると簡単にテストできます。以下のような、クライアント環境を用意します。
hostヘッダーを簡単に変えるには、hostファイルに適当な設定折れれば
ブラウザが勝手にhostヘッダーを入力してサーバーに送ってくれます。
例えば、
まずサーバーとしてアクセスするALBのIPアドレスを確認
まずは、アクセスするつもりのALBのIPアドレスを調べます。
これは、クライアントからnslookupでALBのFQDN名を検索することで、その時のIPアドレスがわかります。
次にhostsファイルに適当なhost名とALBのIPアドレスを設定
次に、クライアントのhostsファイルに、調べたALBのIPアドレスと適当なFQDNを記載します。
今回は、
- aaa.bbb.ccc = 13.230.143.194 (ALB IPアドレス)
- ddd.eee.fff = 13.230.143.194 (ALB IPアドレス)
完全にあり得ないhost名(FQDN)ですが、これで名前解決ができます。
ALBの設定。hostベースでリダイレクトする設定をする
今回の検証環境では
- hostヘッダーがddd.eee.fffが来たら、80ポートのhttpアクセスを、yahooにhttpsアクセスでリダイレクトする
- hostヘッダーがaaa.bbb.cccが来たら、80ポートのhttpアクセスを、googleにhttpsアクセスでリダイレクトする
- それ以外のhostヘッダーの場合は、httpレスポンスコード403を返す
という設定を入れてみました。
クライアントのブラウザでhost名URLアクセスしてみる
クライアントから、ブラウザでアクセスしてみて確認したところ
- 「http://aaa.bbb.ccc」へアクセスすればgoogleにリダイレクトされ
- 「http://ddd.eee.fff」へアクセスすればyahooにリダイレクトされ
- 正規のALBのURLでアクセスしたところ、httpレスポンスコード403を返す
ことが確認できました。
ALBは、ちゃんとhttpリクエストのhostヘッダーを確認していることと
ALBはリダイレクトだけでなく、固定のhttpレスポンスコートを返信することが確認できました。
Apacheのvhostと同じようにALBも動いてくれますね。