Proxyから帰ってくるエラーコードとErrorDocument
私が管理しているWebサーバでは概ねフロントエンドのApacheで外部からのリクエストを受け付けて、そのリクエストのほとんどをバックエンドへProxyPassで流しています。
で、そのバックエンドから帰ってくるエラーコードが500だったり、403だったり、404だったりすんですが、そのエラー画面を統一したい。そりゃErrorDocument一択でしょうってことでこう書いてみたんですが、これが効かない。
ErrorDocument 403 /errordoc/404.html ErrorDocument 404 /errordoc/404.html ErrorDocument 500 /errordoc/404.html
もちろん /errordoc 以下はProxyしないようにしています。/errordoc/404.html をリクエストするとちゃんと参照できることは確認すみ。
いろいろ調べていると、フロントエンドのApacheでプロバイドしているコンテンツに関しては上記のErrorDocumentの設定はちゃんと有効になっています。
むーん、なぜだと先週から悩み続けること4日間。ApacheのドキュメントにProxyErrorOverrideというディレクティブを発見。
このディレクティブはリバースプロキシを使用していて、 エンドユーザに送られるエラーページの外見を共通のものにしたいときに 有用です。このディレクティブは (mod_include の SSI によって) インクルードされたファイルがエラーコードを取得して、正しく動作を するようにもします (デフォルトの動作は、プロキシされたサーバの エラーページの表示で、このディレクティブを有効にすると SSI のエラー メッセージを表示します)。 このディレクティブは informational (1xx), 成功 (2xx), リダイレクト (3xx) ステータスのレスポンス処理には影響しません。
これや*1。ということでこのディレクティブを入れて解決。
ProxyErrorOverride On
*1:三日間大阪にいたので言葉が。。