6 votes

ProxyPass uniquement si le fichier n'existe pas

J'ai vu cet exemple :

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://app_cluster%{REQUEST_URI} [P,QSA,L]

J'ai besoin d'une chose similaire qui déléguera à mod_proxy (c'est-à-dire fera un ProxyPass) lorsqu'un fichier statique n'existe pas. Est-ce réalisable ?

0 votes

Peut-être j'ai mal compris votre question, mais cette configuration avec le drapeau P me semble correcte. Le doc (httpd.apache.org/docs/2.2/en/rewrite/flags.html#flag_p) dit Utilisez ce drapeau (P) pour obtenir une mise en œuvre plus puissante de la directive ProxyPass. Avez-vous besoin d'équilibrage de charge ou est-ce juste un exemple? Où se trouve cette instruction?

0 votes

Hmm, je pense que tu as raison concernant la directive P... Je devrais pouvoir m'en sortir avec juste ça. Le répartiteur est juste un exemple, pas indispensable en réalité. Tout cela serait dans la configuration principale (pas dans un hôte virtuel) car j'ai juste besoin qu'Apache serve des fichiers statiques s'ils existent (à des fins de simulation) ou les transmette à Tomcat dans tous les autres cas.

0 votes

J'avais testé cette configuration (sans l'équilibrage de charge) et c'est bon. Pensez juste à supprimer le premier "/" de la RewriteRule (^(.*)$) si vous le mettez dans un ou un conteneur similaire...

3voto

Zimmi Points 1031

Ce paramétrage avec le drapeau P est le bon pour ce que vous souhaitez faire. La documentation sur le drapeau P indique :

Utilisez ce drapeau (P) pour obtenir une implémentation plus puissante de la directive ProxyPass

Quelques points à noter sur l'exemple : comme l'a mentionné Andrew dans sa réponse, le DOCUMENT_ROOT n'est pas nécessaire.

Le deuxième point est de faire attention à l'emplacement de ces instructions : supprimez le premier "/" de la RewriteRule (^(.*)$) si vous les mettez dans un <VirtualHost> ou conteneur similaire...

De plus, le drapeau P implique le drapeau L, il n'est donc pas utilisé mais peut rendre les choses un peu plus claires si nous le laissons. De plus, un "/" est nécessaire après l'adresse web.

Donc, cela pourrait ressembler à ceci :

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ http://quelquepart/$1 [P,QSA,L]

1 votes

Note : Cela n'a pas fonctionné pour moi avec Apache2 v2.4.29. Cependant, les instructions sur stackoverflow.com/a/43431369/293064 ont fini par fonctionner pour obtenir cet effet.

0 votes

Voir aussi stackoverflow.com/questions/43421049/… qui contient des règles de réécriture pour cela et ajoute ProxyPassReverse / https://somewhere/ après eux en prétendant que c'est nécessaire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X