Apache Httpd Custom ErrorDocument 404 lorsque ProxyPass a renvoyé 404

9

J'ai un serveur Web Apache devant un autre serveur d'applications, utilisant Proxy Pass. Lorsque la demande à l'application a renvoyé l'erreur 404, je souhaite afficher la page d'erreur personnalisée du serveur Web et non celle provenant du serveur d'applications. J'ai essayé d'installer le ErrorDocument 404 sur l'hôte virtuel, mais cela ne fonctionne pas. Comment dois-je procéder? Ou ce n'est pas possible?

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

  ErrorDocument 404 /error.html
</VirtualHost>
hendry.fu
la source

Réponses:

12

Vous pouvez éviter le proxy pour un répertoire spécifique en spécifiant un !à la place de la cible proxy. Puisqu'il agit sur un répertoire, passez error.htmldans un sous-répertoire (nous dirons errors), et:

<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>
Shane Madden
la source
Désolé, peut-être que la configuration manque de détails, mais ce que je veux, c'est attraper l'erreur 404 renvoyée par le proxy pass et afficher le error.html à la place.
hendry.fu
1
Merci, j'ai trouvé le moyen de passer outre, je peux simplement utiliser la directive
ProxyErrorOverride
@satyavirya Bonne capture, je vais ajouter cela à la réponse pour les futurs chercheurs.
Shane Madden
merci pour l'allusion à ProxyErrorOverride, mais j'ai trouvé qu'il y avait un bogue lors de l'utilisation d'Apache 2.4 avant 2.4.11 qui devrait déjà être corrigé: bz.apache.org/bugzilla/show_bug.cgi?id=53420 ... peut-être le seul solution serait de réduire le délai d'expiration du proxy?!
FibreFoX
ProxyPass /errors !m'a vraiment aidé!
NullIsNot0