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>

Ответы:


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.