過去問ドリル

LinuCレベル3 プラットフォームスペシャリスト 高可用性プラットフォームの構築 問15

高可用性プラットフォームの構築/Webサーバーによる負荷分散

Apacheをリバースプロキシとして、/app/ へのリクエストをバックエンドの http://app1:8080/ へ ProxyPass で転送している。バックエンドがリダイレクト応答を返すと、ブラウザが http://app1:8080/… へ直接アクセスしようとして失敗する。対処として適切なものはどれか。

当サイトのオリジナル問題(LinuCレベル3 プラットフォームスペシャリストの出題範囲「高可用性プラットフォームの構築」に対応。実際の試験問題ではありません)

正解: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へ書き換えます。
LinuCレベル3 プラットフォームスペシャリストの問題を演習モードで解く