ProxyPassが404を返したときのApache HttpdカスタムErrorDocument 404


9

プロキシパスを使用して、別のアプリケーションサーバーの前にApache Webサーバーがあります。アプリケーションへのリクエストがエラー404を返したとき、アプリケーションサーバーからのエラーページではなく、Webサーバーからのカスタムエラーページを表示したいと思います。仮想ホストでErrorDocument 404をセットアップしようとしましたが、機能しません。どうすればよいですか?またはこれは不可能ですか?

<VirtualHost *:80>
  ServerName servername
  DocumentRoot /somepath/
  ProxyPass / http://localhost:8080/someapp/
  ProxyPassReverse / http://localhost:8080/someapp/

  ErrorDocument 404 /error.html
</VirtualHost>

回答:


12

!プロキシターゲットの代わりにを指定すると、特定のディレクトリのプロキシを回避できます。それはディレクトリに作用するのでerror.html、サブディレクトリ(と言うerrors)に移動し、そして:

<VirtualHost *:80>
  ServerName servername
  DocumentRoot /somepath/
  ProxyPass /errors !
  ProxyPass / http://localhost:8080/someapp/
  ProxyPassReverse / http://localhost:8080/someapp/
  ProxyErrorOverride On
  ErrorDocument 404 /errors/error.html
</VirtualHost>

申し訳ありませんが、構成に詳細が不足している可能性がありますが、プロキシパスから返されたエラー404をキャッチして、代わりにerror.htmlを表示することが必要です。
hendry.fu 2011

1
おかげで、オーバーライドする方法を見つけました。ProxyErrorOverrideディレクティブを使用するだけです
hendry.fu '17

@satyavirya良いキャッチ、これを将来の検索者のための答えに追加します。
シェーンマッデン

ProxyErrorOverrideへのヒントに感謝しますが、2.4.11より前のApache 2.4を使用すると、すでに修正されているバグがあることがわかりました:bz.apache.org/bugzilla/show_bug.cgi?id=53420 ...おそらく唯一回避策は、プロキシのタイムアウトを減らすことでしょうか?!
FibreFoX 2015

ProxyPass /errors !本当に助けてくれました!
NullIsNot0
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.