Front Door のバックエンドを冗長化するときの設定

最近個人的に Front Door が流行っていますがいろいろ考えないといけないポイントがあるので先日に続きメモしていきます。

まず前提としてこちらの構成がありますのではじめにお読みください。
tsunomur.hateblo.jp

要件としては以下があります。

  1. Front Door のバックエンドに Web Apps が存在する
  2. Web Apps は東西日本にデプロイされており、普段は片方がプライマリになっている
  3. Web Apps は直接アクセスさせず、特定の Front Door を必ず経由させたい
    (*.azurewebsites.net にアクセスさせたくない)

上記を実現するために(特に 3 番目)、Web Apps 側の .htaccess で以下の様な設定をしています。

SetEnvIf X-Forwarded-Host "www\.contoso\.com" allowed_fd <---------- 特定の Front Door のホスト名を指定する
Order Deny,Allow
Deny from all
Allow from env=allowed_fd

この時、東西の冗長構成にしていると(+優先度に差をつけていると)、片方はプローブのトラフィックのみが発生することになります。

ここで発覚した問題として、東西の切り替わりが頻繁に発生するというものでした。

結論としては、プローブのリクエストヘッダーには X-Forwarded-Host が含まれないために、403 が返ってしまい、シーソー状態になっているという問題でした。
※ちなみに、バックエンドの状態は、メトリックの Backend Health Percentage で確認できます。

ではどうするかというと、プローブのリクエストには、X-FD-HealthProbe というヘッダーが設定されるので、そのヘッダーの場合も allow する .htaccess を書いてあげると想定通りの動作になりました。

こんな感じ。

SetEnvIf X-Forwarded-Host "www\.contoso\.com" allowed_fd
SetEnvIf X-FD-HealthProbe "1" allowed_fd <-------------------- これ
Order Deny,Allow
Deny from all
Allow from env=allowed_fd

以前はこんなことなかった気がするんですが気のせいだったのかなぁ。。とか思ったり、その他いろいろハマりつつも新しめのサービスは触ってて面白いですね。