reverse proxyしつつErrorDocumentする際の罠
で見事にハマったのでメモ.
たとえば以下のようにreverse proxyしている場合に、バックエンドプロセス群が落ちた際のエラー画面を自作したいと思ったとする。
<Location /> ProxyPass balancer://pbcluster/ ProxyPassReverse balancer://pbcluster/ </Location>
そんな時はとりあえず、ここに
ErrorDocument 503 /maintenance.html
と置くでしょう。
そうすると、いつも通りのApache組み込みエラー画面が表示されて下記のメッセージも付与されてしまう。
a 503 Service Temporarily Unavailable error was encountered while trying to use an ErrorDocument to handle the request
で、おそらく/maintenance.htmlを表示しようとするものの
これを回避しようと思い, LocationMatchで/maintenance.htmlを除外(否定の先読み)しようかと試したのですが期待通りに動いてくれない(Perlだと上手くいくんだけどなぁ)。
結局、ProxyPassの除外ディレクティブを使って解決しましたとさ。どっとわらい。
ErrorDocument 503 /maintenance.html ProxyPass /maintenance.html ! <Location /> ProxyPass balancer://pbcluster/ ProxyPassReverse balancer://pbcluster/ </Location>