先日(2018/07/25)、ALB に、リダイレクト/固定レスポンスという 2 つのアクションが追加されたので早速試してみた。
情報ソース Elastic Load Balancing で Application Load Balancer のリダイレクトおよび固定レスポンスのサポートを発表
ALB リスナーのルール設定のアクションにおいて、転送先のターゲットグループを設定する以外に「リダイレクト先...」および「固定レスポンスを返す...」という項目が選択可能になっていた。
「リダイレクト」を選択すると以下の項目が設定可能だった。
ホスト、パス、クエリを維持したまま、HTTPS エンドポイントにリダイレクトしたり、あるいは HTTP リクエストは問答無用でパス、クエリを破棄し、対象ホストの HTTPS エンドポイントにリダイレクトをしたり、ニーズにより複雑なカスタマイズが可能となっていた。
ALB の HTTP80 リスナーに対して ホスト: *.53ningen.com への HTTP リクエストを、ホスト・パス・クエリを維持したまま HTTPS エンドポイントにリダイレクトする設定をいれてみました。結果は以下の通りです。
$ curl "http://*********.********.elb.amazonaws.com/path/to/res?key=value&hoge=fuga" -H 'Host: test.53ningen.com' -I HTTP/1.1 301 Moved Permanently Server: awselb/2.0 Date: Mon, 30 Jul 2018 13:35:01 GMT Content-Type: text/html Content-Length: 150 Connection: keep-alive Location: https://test.53ningen.com:443/path/to/res?key=value&hoge=fuga
また、クエリ、パスを破棄するように設定すると次のような挙動となりました。
$ curl "http://*********.********.ap-northeast-1.elb.amazonaws.com/path/to/res?key=value&hoge=fuga" -H 'Host: test.53ningen.com' -I HTTP/1.1 301 Moved Permanently Server: awselb/2.0 Date: Mon, 30 Jul 2018 13:35:46 GMT Content-Type: text/html Content-Length: 150 Connection: keep-alive Location: https://test.53ningen.com:443/
リダイレクトの nginx/apache 設定書く手間が省けます。非常に便利ですね。
つづいて固定レスポンスを試してみます。
ALB の HTTP80 リスナーに対してホスト: 404.53ningen.com へのリクエストに ResponseCode: 404, Content-Type: text/html, Body: <body><h1>Not Found</h1></body>
と返す設定をして動作を確認します。
$ curl "http://*******.*******.elb.amazonaws.com/path/to/res?key=value&hoge=fuga" -H 'Host: 404.53ningen.com' <body><h1>Not Found</h1></body>
ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです