ProxyPassとProxyErrorOverrideとErrorDocument
リクエストをProxyPassしている先がなにかエラーを返した時に統一したエラー画面を出したい。
いままでの設定はこうなっていました。
ProxyPass /somewhere http://server1/somewhere ProxyPassReverse /somewhere http://server1/somewhere
これだとserver1が返してくるエラー画面をそのまま出力してしまいます。
これを以下のようにしてみました。
ErrorDocument 403 /error/error.html ErrorDocument 404 /error/error.html ErrorDocument 500 /error/error.html ProxyPass /error ! ProxyErrorOverride On ProxyPass /somewhere http://server1/somewhere ProxyPassReverse /somewhere http://server1/somewhere
そうすると、期待したように404エラーや500エラーの時には/error/error.htmlを出してくれるようにはなりましたが、なぜかerror.htmlを出すまでにtimeout値まで時間がかかる。なぜだ。
ちなみに
ErrorDocument 403 /error/error.html ErrorDocument 404 /error/error.html ErrorDocument 500 /error/error.html ProxyPass /error ! ProxyErrorOverride On RewriteEngine On RewriteCond %{REQUEST_URI} ^/somewhere RewriteRule ^(.*)$ http://server1/$1 [P,L]
てな具合にmod_rewriteを使ったProxyならこの現象はおきない。
バックエンド側(server1)の挙動を調べるとProxyPassを使った場合もRewriteを使った場合もリクエストに対してはノータイムでエラーレスポンスを返している。
うーん、わからん。
タイムアウトまで待つってことは、エラー画面を出そうとしてそれをまたどこかへProxyしようとしてそれがタイムアウトしているのかな。