Ai-je besoin pour utiliser la directive ProxyPassReverse si je suis en utilisant le mod de réécriture?
Je suis à l'aide de mod de réécriture pour masquer le contexte de la racine de mon application. Par exemple,
RewriteRule ^/directory/(.*) balancer://appcluster/directory/$1 [P]
La appcluster ressemble à ceci:
<Proxy balancer://appcluster>
BalancerMember http://localhost:8080/App route=app_01 keepalive=On loadfactor=1 ttl=300 min=3 smax=5 max=15
ProxySet lbmethod=byrequests stickysession=JSESSIONID|jsessionid timeout=120 nofailover=On
</Proxy>
Dois-je utiliser ProxyPassReverse
à tous? J'ai utilisé de l'utiliser parce que mon ancien serveur web de code ressemble à ceci:
ProxyPass /App balancer://appcluster lbmethod=byrequests stickysession=JSESSIONID|jsessionid timeout=120 nofailover=On
ProxyPassReverse /App http://localhost:9013/App
OriginalL'auteur Scoota P | 2011-11-15
Vous devez vous connecter pour publier un commentaire.
La
ProxyPassReverse
est utilisé pour modifier les en-têtes envoyés par l'application (appcluster) pour Apache, avant de Apache envoie le navigateur. Par exemple, si l'application se trouve à http://localhost:9013/, et il essaie de rediriger le navigateur vers, disons,/new_location/
, puis répond avec un service de redirection et de l'emplacement de l'en-tête de http://localhost:9013/new_location/, et Apache va prendre ce et de l'envoyer au navigateur. Le problème est, le navigateur (en supposant que c'est quelque part d'autre) puis essaie d'envoyer une demande à http://localhost:9013/new_location/, et obtient une erreur.Ce ProxyPassReverse n'est intercepte ces en-têtes, et les réécrit afin qu'ils correspondent à ce que le serveur Apache qui fait le proxy ressemble. Donc, si mon serveur apache est l'hébergement http://myhost.com/ et j'ai un
ProxyPass
que les points de/
à http://localhost:9013/App, si l'application assis à localhost:9013 renvoie une redirection vers http://localhost:9013/App/new_location/, je vais avoir besoin d'utiliserProxyPassReverse
afin qu'il soit réécrit pour http://myhost.com/new_location/ par Apache avant d'envoyer la demande au navigateur.Si vous n'êtes pas la délivrance de redirection, il ne va pas être un problème, mais il ne fait pas de mal de l'avoir là, dans le cas d'un 301/302 redirection est retourné. Aussi loin que mod_rewrite, la règle de réécriture s'applique à la demande de l'Application, et non pas la réponse à venir à partir de l'App. De sorte qu'ils sont mutuellement exclusifs événements.
Je pense que ce que vous avez à faire est correcte. Si j'ai vu des gens l'utiliser en sorte que l'url sur la droite est à l'extérieur de domaine et non localhost. Mon Jboss déploiements utiliser la directive ProxyPassReverse comme vous l'avez et qu'ils rediriger l'amende juste.
Très belle Explication à propos de la directive ProxyPassReverse et la nécessité pour elle. @jon lin .. Merci
bonne explication. Maintenant, je sais que j'ai besoin de l'utiliser. Merci.
Je veux préserver l'url dans le navigateur avec la suite de tous les exemples.xyz/fr/fr/recherche devrait être mandaté pour exemple.us/fr/fr/recherche. J'ai les règles suivantes. ProxyPassMatch "^/(.{2,3})/(.{2,3})/(.*)/?$" "exemple.$1/$1/$2/$3 ProxyPassReverse "^/(.*)$" "exemple.xyz/$1" à l'exception de 404 l'url est modifiée pour exemple.us/fr/fr/recherche.
OriginalL'auteur Jon Lin