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>

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>

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.