Apache Httpd Custom ErrorDocument 404 Когда ProxyPass вернул 404

9

У меня есть веб-сервер Apache перед другим сервером приложений, использующим Proxy Pass. Когда запрос к приложению вернул ошибку 404, я хочу показать пользовательскую страницу с ошибкой с веб-сервера, а не с сервера приложений. Я попытался настроить ErrorDocument 404 на виртуальном хосте, но он не работает. Как мне это сделать? Или это невозможно?

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

  ErrorDocument 404 /error.html
</VirtualHost>
hendry.fu
источник

Ответы:

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
1
Спасибо, я нашел способ переопределения, я могу просто использовать директиву
ProxyErrorOverride
@satyavirya Хороший улов, я добавлю это к ответу для будущих искателей.
Шейн Мэдден
спасибо за подсказку ProxyErrorOverride, но я обнаружил, что при использовании Apache 2.4 до 2.4.11 есть ошибка, которая должна быть уже исправлена: bz.apache.org/bugzilla/show_bug.cgi?id=53420 ... возможно, единственная Обойти это было бы, чтобы уменьшить время ожидания прокси ?!
FibreFoX
ProxyPass /errors !действительно выручил меня!
NullIsNot0