フォワードプロキシのホスト名がリクエストから欠けている
通常の HTTP フォワードプロキシ経由のリクエストは宛先を識別するため、Host と Express の hostname はプロキシ自身の別名を区別できません。
east.proxy.example と west.proxy.example が同じ通常の HTTP プロキシリスナーに解決されるとします。どちらの名前を使うクライアントも、次のように送信できます。
GET http://www.example.org/report HTTP/1.1
Host: www.example.org
リクエストが識別するのはウェブサイトです。TCP を開く前にクライアントが解決したプロキシの別名は含まれません。したがって Express の Host 由来の hostname は、そうしたプロキシのサブドメインに基づいてルートを選択できません。
クライアントとプロキシの両方を制御できるなら、明示的なルーティング入力を与えてください。X-Route ラベルを実装するプロキシの場合:
curl --proxy http://east.proxy.example:8080 \
--proxy-header 'X-Route: east' \
https://www.example.org/
--proxy-header は CONNECT を含め、プロキシとの通信を対象にします。HTTPS リクエスト上の通常の -H ヘッダーは、宛先の暗号化された HTTP 交換の内側に属します。
サーバーはルーティングポリシーを実装して認可し、そのうえでラベルをウェブサイトへ転送せずに消費しなければなりません。別の方法として、個別に構成したリスニングエンドポイントやプロキシアカウントをルーティング入力に使えます。
HTTPS 宛先の場合、Node は 最初のトンネルリクエスト を HTTP サーバーの connect イベント経由で受け取ります。通常の Express リクエストミドルウェアはこのイベントを扱いません。その CONNECT ターゲットが示すのは依然として宛先サーバーであり、プロキシの別名ではありません。