サイトアイコン puti se blog

ALB経由でHTTPヘッダーの追加・書き換えを確認してみた

AWSのELB(ロードバランサ)の中で、ALB(アプリケーションロードバランサ)を使用すると、ALB前後でHTTPヘッダーが書き換えられたり(変化)・追加(付与)されたりします。

例えば、その影響でALB経由でのProxyサーバー構成が構築できなかったりするので、具体的にどういう事か検証し確認していましました。

環境・前提条件

User → ALB → EC2

環境を作り、ALBの前後でHTTPヘッダーがどう変化・付与されるか確認してみました。

結論、ALBはHTTPリクエストヘッダーの追加だけじゃなく書き換えもある!

今回は特により詳しく確認したかったため「仮に上記検証環境のEC2がProxyサーバーだったら?」というイメージで、Userのブラウザ(Postman)に「ALB DNS名」 or「 EC2 パブリックIPアドレス」をProxy設定してHTTPヘッダーの出力を確認してみました。

厳密にはALBを経由するとHTTP Requestが書き換わることがわかりました。
そのため、EC2 Proxyサーバーの冗長構成でフロントにALBを利用することが出来ないんですね(Proxyサーバーの場合はNLBを利用しましょう)。

以下、今回の結論を導いた検証結果情報になります。

ALB前のリクエストヘッダー相当

実際に、UserとALB間のHTTPリクエストヘッダーを調査しようとすると、パケットキャプチャーとか仕掛けなければならなくなり大変なので、相当する情報として、Userが直接EC2に接続しに行った場合のHTTPリクエストヘッダーをまず調べました。

Userが以下の設定でALBにアクセスしに行ったときの、EC2が受け取ったHTTPリクエストヘッダーの出力です。

EC2側の出力としましては、

HTTP Request Headers

HTTP RequestGET http://a.b.c/test.php HTTP/1.1
User-AgentPostmanRuntime/7.26.5
Accept*/*
Cache-Controlno-cache
Postman-Token603b2c7e-03e6-4db3-94e3-9cdb919a26d1
Hosta.b.c
Accept-Encodinggzip, deflate, br
Connectionkeep-alive

HTTP Response Headers

Upgradeh2,h2c
ConnectionUpgrade
X-Powered-ByPHP/5.4.16

HTTPレスポンスヘッダーは厳密には、phpの下のapacheが付加するHTTPレスポンスヘッダーも追加で存在します。

上記が、apacheも加わったユーザー側に返るHTTPレスポンスヘッダーです。apacheのバージョン情報とかもオンされていますね。

ALB後のHTTPリクエストヘッダー

同じUserから今度は、同じHTTPリクエストへッダーを、User→ALBになげ、ALB→EC2でEC2が受け取ったHTTPリクエストヘッダーを確認しました。

Userが以下の設定でALBにアクセスしに行ったときの、EC2が受け取ったHTTPリクエストヘッダーの出力です。

EC2側の出力としましては、

HTTP Request Headers

HTTP RequestGET /test.php HTTP/1.1
X-Forwarded-For183.86.*.*
X-Forwarded-Protohttp
X-Forwarded-Port80
Hosta.b.c
X-Amzn-Trace-IdRoot=1-5f75d5d3-780ad3c84bfe37a27706631f
User-AgentPostmanRuntime/7.26.5
Accept*/*
Cache-Controlno-cache
Postman-Token8e9ff610-b111-4e21-9818-6dd0dc2ada1b
Accept-Encodinggzip, deflate, br

「Connection: keep-alive」HTTPヘッダーも無くなっていますね。

HTTP Response Headers

Upgradeh2,h2c
ConnectionUpgrade
X-Powered-ByPHP/5.4.16
モバイルバージョンを終了