web-dev-qa-db-fra.com

ProxyPassMatch avec ProxyPassReverse

Les gens, nous essayons de configurer le proxy inverse Apache pour le scénario suivant:

  • Les demandes entrantes prennent la forme http://foo.com/APP/v1/main.html
  • Pour certains serveurs, l'URL fera référence à une version différente, par exemple, http://foo.com/APP/v2/main.html
  • Un équilibreur de charge en amont (HAProxy) enverra la demande au bon serveur qui aura un proxy inverse Apache2 devant un serveur JBoss.
  • Lorsque la demande apparaît sur Apache 2, elle aura un chemin de demande comme /APP/v1/main.html
  • Nous voulons qu'il (inverse) le proxy vers http://localhost:8080/AppContext/main.html, indépendamment du fragment de version dans l'URL (v1, v2, etc.).

J'ai essayé de faire ça comme ça:

ProxyPassMatch ^/.*?/APP.*?/(.*)$ http://localhost:8080/AppContext/$1
ProxyPassReverse /APP http://localhost:8080/AppContext

Mes questions sont:

  1. Mon utilisation de ProxyPassMatch est-elle correcte?
  2. Mon ProxyPassReverse est "statique". Comment puis-je lui faire prendre conscience des choses potentiellement variables après /APP?

Merci pour toutes informations.

-Raj

16
Raj

Vous êtes proche, essayez de changer un peu l'expression régulière pour tenir compte du fragment de version:

ProxyPassMatch ^/.*?/APP.*?/v[0-9]+/(.*)$ http://localhost:8080/AppContext/$1

Le ProxyPassReverse sert principalement à assurer la réécriture à la volée des champs d'en-tête d'emplacement dans les réponses données par l'application mandatée. Ainsi, lorsqu'il renvoie une redirection 301 vers, disons, http://localhost:8080/AppContext/something, Apache sait le changer en /APP/v1/something afin que les informations derrière le proxy ne soient pas exposées. Parce que vous avez une URL dynamique utilisée dans le proxy inverse, vous avez quelques choix ici. Vous pouvez soit l'envoyer à l'équilibreur de charge HAProxy (vous ne savez pas où cela est pour vous), soit en choisir un et espérer le meilleur. Par exemple, si vous avez un équilibreur de charge sur /APP/balancer/ qui envoie ensuite des demandes à /APP/v1/, /APP/v2/, /APP/v3/, etc. Ensuite, vous pouvez faire ceci:

ProxyPassReverse /APP/balancer http://localhost:8080/AppContext

Sinon, vous pouvez simplement le désigner et espérer le meilleur:

ProxyPassReverse /APP/v1 http://localhost:8080/AppContext
9
Jon Lin