LinuCレベル3 プラットフォームスペシャリスト 高可用性プラットフォームの構築 問15
高可用性プラットフォームの構築/Webサーバーによる負荷分散Apacheをリバースプロキシとして、/app/ へのリクエストをバックエンドの http://app1:8080/ へ ProxyPass で転送している。バックエンドがリダイレクト応答を返すと、ブラウザが http://app1:8080/… へ直接アクセスしようとして失敗する。対処として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 プラットフォームスペシャリストの出題範囲「高可用性プラットフォームの構築」に対応。実際の試験問題ではありません)
- AProxySetでバックエンドのtimeoutとretryを調整し、リダイレクトの応答を待てるようにする
- BKeepAliveTimeoutを延ばし、リダイレクト後のリクエストを同じ接続で受けられるようにする
- CProxyPassに「!」を指定し、リダイレクト先のパスをプロキシの対象から除外しておく
- DProxyPassReverseに、ProxyPassと同じパスとバックエンドのURLを指定しておく
正解:D
解説
ProxyPassReverseは、バックエンドが返すHTTPレスポンスのLocation・Content-Location・URIヘッダーに含まれるバックエンドのURLを、リバースプロキシ側のURLに書き換えるディレクティブです。「ProxyPass /app/ http://app1:8080/」に対して「ProxyPassReverse /app/ http://app1:8080/」を設定すると、リダイレクト先がプロキシ経由のURLになり、ブラウザはプロキシを通してアクセスし続けられます。ProxyPassだけではリクエストの転送しか行われず、レスポンスヘッダーは書き換えられません。なお、Cookieのドメインやパスを書き換えるにはProxyPassReverseCookieDomain等を使います。
選択肢ごとの解説
- A誤り。ProxySetはバランサーやワーカーのパラメータを設定するディレクティブで、リダイレクト先のURLは書き換えられません。
- B誤り。KeepAliveTimeoutはクライアントとの持続的接続を次のリクエストまで保持する時間で、Locationヘッダーの内容は変わりません。
- C誤り。ProxyPassの「!」は指定したパスを転送の対象外にする書き方で、バックエンドが返すリダイレクト先を直すものではありません。
- D正しい。ProxyPassReverseがLocation等のヘッダーにあるバックエンドのURLを、プロキシ側のURLへ書き換えます。