Apache mod-ProxyErrorOverride proxyerroriride pour des motifs D'URL spécifiques

J'utilise Apache 2.2 avec mod-proxy et je l'ai configuré avec plusieurs instructions ProxyPass pour proxy de L'URL distante à L'URL locale. Je dois avoir des documents d'erreur personnalisés retournés à partir D'Apache pour ces URLs mandatées, donc j'ai défini "ProxyErrorOverride On" dans ma configuration mod-proxy avec quelques directives ErrorDocument (avec chemin D'URL local) pour retourner des pages d'erreur personnalisées pour quelques codes D'état HTTP intéressants. Cependant, quand un code de statut est retourné pour lequel je N'ai pas créé ErrorDocument directive for, Apache remplace le corps de réponse par une page d'erreur par défaut au lieu de laisser le corps de réponse original intact. Cela ne fonctionne pas avec l'application. Donc, je vous ai 2 questions:

1) est-il possible de configurer Apache pour laisser le corps de réponse original intact pour un code de statut particulier si Je ne dispose pas d'un correcteur ErrorDocument défini pour cela?

2) est - il possible que la directive ProxyErrorOverride ne s'applique qu'à certains les URLs de mes déclarations ProxyPass?

12
demandé sur benw 2011-09-28 23:04:46

2 réponses

comme arober11 l'a souligné dans le commentaire ci-dessus:

Peur que la réponse est: Non. Si la directive pouvait être limitée à un emplacement, un répertoire, ou un ensemble D'URLs, alors il y aurait quelque chose dans la section "Contexte", de la page de man: httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxyerroroverride

d'autre part: vous pouvez toujours l'ajouter à mod_proxy.c à vous-même.

2
répondu bjelli 2013-04-14 08:55:05

pour la question 2: Définitivement faisable. L'utilisation de redirections internes vers un nouvel hôte ou un port est possible. Bref aperçu utilisant des hôtes (ajouter noErrorOverrideUrl, doErrorOverrideUrl dans DNS ou / etc / hosts d'apache-machine):

NameVirtualHost *:80
<VirtualHost *:80>
   RewriteEngine On
   RewriteRule ^(/noErrorOverrideUrl/.*) http://noErrorOverrideUrl [L,P]
   RewriteRule ^(/doErrorOverrideUrl/.*) http://doErrorOverrideUrl [L,P]          
</VirtualHost>

<VirtualHost *:80>
   ServerName noErrorOverrideUrl
   ProxyErrorOverride Off
   ProxyPass ...
   ...
</VirtualHost>

<VirtualHost *:80>
   ServerName doErrorOverrideUrl
   ProxyErrorOverride On
   ProxyPass ...
   ...
</VirtualHost>

Bref aperçu à l'aide de ports:

Listen 80
Listen 81
Listen 82
<VirtualHost *:80>
   RewriteEngine On
   RewriteRule ^(/noErrorOverrideUrl/.*) http://server:81 [L,P]
   RewriteRule ^(/doErrorOverrideUrl/.*) http://server:82 [L,P]
</VirtualHost>

<VirtualHost *:81>
   ProxyErrorOverride Off
   ProxyPass ...
   ...
</VirtualHost>

<VirtualHost *:82>
   ProxyErrorOverride On
   ProxyPass ...
   ...
</VirtualHost>
1
répondu Jonas Andersson 2015-04-23 20:46:42