Azure Application Gateway で HTTP ヘッダーを書き換える

執筆者: Abhave Sharma (Program Manager, Azure Networking)

このポストは、2019 年 4 月 16 日に投稿された Rewrite HTTP headers with Azure Application Gateway の翻訳です。

 

この記事では、Azure Application Gateway で HTTP ヘッダーを書き換える機能についてご紹介します。この機能を使用すると、要求または応答のパケットがクライアントとバックエンド アプリケーションの間を移動している間に、HTTP 要求ヘッダーと HTTP 応答ヘッダーを追加、削除、更新できます。また、条件を追加して、その条件が満たされた場合にのみ指定したヘッダーを書き換えることもできます。要求と応答に関する補足的な情報が格納されるサーバー変数もサポートされているため、それを利用した効果的な書き換え規則を設定することも可能です。

A diagram showing how X-Forwarded_For affects how the client interacts with the application gateway and backend application.

図 1: Application Gateway で要求の X-Forwarded-For ヘッダーからポート情報を削除し、応答の Location ヘッダーを変更

ヘッダーを書き換えると、重要なシナリオに対応できるようになります。一般的なユースケースの一部をご紹介しましょう。

X-Forwarded-For ヘッダーからポート情報を削除する

Application Gateway では、要求がバックエンドに転送される前に、すべての要求に X-Forwarded-For ヘッダーを挿入できます。このヘッダーは、IP とポートをコンマで区切った形式となっていますが、バックエンド アプリケーションでは IP アドレスのみのヘッダーしか必要でないというシナリオもあります。たとえば、バックエンド アプリケーションがコンテンツ管理システム (CMS) の場合です。ほとんどの CMS はヘッダー内の追加のポート情報を解析できません。このようなシナリオに対応するには、ヘッダーに add_x_forwarded_for_proxy サーバー変数を設定します。この変数には、ポート情報を除いた X-Forwarded-For クライアント要求ヘッダーが格納されます。

Image showing how to remove port information from the X-Forwarded-For heading.

図 2: X-Forwarded-For ヘッダーからポート情報を削除するための Application Gateway の設定

App Service やその他のマルチテナント バックエンドと適切に統合する

バックエンド アプリケーションからリダイレクト応答が送信されたときに、応答内に指定されたものとは異なる URL にクライアントをリダイレクトすることもできます。たとえば、App Service が Application Gateway の背後にホストされている場合です。

App Service はマルチテナント サービスであるため、目的のエンドポイントへのルーティングの際には、要求のホスト ヘッダーを使用します。App Service の既定のドメイン名は *.azurewebsites.net (contoso.azurewebsites.net など) であり、Application Gateway のドメイン名 (contoso.com など) とは異なります。クライアントからの要求には、Application Gateway のドメイン名である contoso.com がホスト名として設定されるため、Application Gateway はホスト名を contoso.azurewebsites.net に変更し、バックエンドの App Service が要求を目的のエンドポイントにルーティングできるようにします。ただし App Service は、リダイレクト応答を送信するときに、Application Gateway から受信した要求内のホスト名と同じホスト名を応答の Location ヘッダーに使用します。したがって、App Service が相対パスへのリダイレクト (/path1 から /path2 へのリダイレクト) を実行する際に、クライアントは Application Gateway (contoso.com/path2) を経由せずに、直接 contoso.azurewebsites.net/path2 に対して要求を行おうとします。Application Gateway が無視されることになるため、望ましくありません。

この問題は、Location ヘッダーのホスト名を Application Gateway のドメイン名に設定することで解決できます。そのためには、条件付きの書き換え規則を作成し、応答の Location ヘッダーに azurewebsites.net が含まれる場合に、Location ヘッダーを書き換えて Application Gateway のホスト名を設定するようにします。

An image showing how to configure a gateway for modifying the location header.

図 3: Location ヘッダーを変更するための Application Gateway の設定

セキュリティ関連の HTTP ヘッダーを実装して脆弱性の悪用を阻止する

セキュリティ脆弱性のいくつかは、必要なヘッダーをアプリケーション応答に実装することで修正できます。たとえば、X-XSS-Protection、Strict-Transport-Security、Content-Security-Policy、X-Frame-Options などのヘッダーを実装します。Application Gateway では、これらのヘッダーをすべての応答に設定できます。

利用を開始する

詳細は「Application Gateway で HTTP ヘッダーを書き換える」をご覧ください。書き換えを設定する際の手順については、「Application Gateway で HTTP 要求/応答を書き換える (英語)」を参照してください。

ご意見をお聞かせください

ご意見をお寄せいただく際は、以下をご利用ください。

  • UserVoice:  Application Gateway に関する新しいアイデアは、UserVoice ページ (英語) でお待ちしております。
  • コーホートに参加する: マイクロソフトでは、新しいお客様にコーホートに参加していただきたいと常々考えています。ぜひ、新機能をいち早くお試しになり、Application Gateway の品質向上にご協力ください。コーホートへの参加に関心をお持ちの場合は、こちらの簡単な入力フォームからお申し込みください。