Wie kann LocationMatch und ProxyPassMatch Kombiniert werden?

Ich bin einrichten eines Apache 2.4.6-server auf einer internen Maschine zu Testzwecken. Eines der Dinge, dass der Apache-server ist eigentlich zu tun ist, zu handeln als reverse-proxy für einen anderen server auf localhost:3030.

Den server auf localhost:3030 erwartet, dass eine von ein paar dataset-Namen, die auf den ersten Pfad-Ebene (jetzt das set besteht nur aus dem dataset experimental, aber mehr wird Hinzugefügt werden, die später auf), so dass ich versuche zu pass, dass durch die von den angefragten Pfad.

In meiner vhost funktioniert:

<Location /experimental/>
    ProxyPass http://localhost:3030/experimental/
    ProxyPassReverse /
</Location>

Weitere Datensätze, die könnte ich kopieren und ersetzen experimental mit den anderen dataset-Namen. Es ist offensichtlich, dass führt zu einer Menge von code-Duplizierung/Redundanz, die sowohl eine Quelle von Fehlern und die Wartung horror.

Daher möchte ich zu etwas mehr flexibel und behandeln Sie mehrere datasets in einem solchen block. Dies sollte möglich sein, mit der LocationMatch - Direktive.

Als angegeben dieser Kommentar und auf dieser Seite, muss ich ersetzen ProxyPass ProxyPassMatch, wenn Sie diesen innerhalb einer LocationMatch block. Im wesentlichen, die docs Staat die gleiche:

Derselben treten innerhalb einer LocationMatch Abschnitt jedoch ProxyPass nicht interpretieren regexp als solche, so ist es notwendig, verwenden ProxyPassMatch in dieser situation statt.

Den LocationMatch docs erklären:

Vom 2.4.8 ab, benannte Gruppen und Rückverweise sind erfasst und geschrieben, um die Umgebung mit dem entsprechenden Namen beginnen mit "MATCH_" und im oberen Fall. Dies ermöglicht Elemente der URLs verwiesen werden, die innerhalb von Ausdrücken und Module wie mod_rewrite. Um zu verhindern, dass Verwirrung, nummeriert (Unbenannte) Rückverweise werden ignoriert. Die Verwendung von benannten Gruppen statt.

Diese information ist nur gültig, da der Apache 2.4.8, die presumeably, warum der folgende Code funktioniert nicht auf meiner 2.4.6 installation:

<LocationMatch /(?<dataset>experimental)/>
    ProxyPassMatch http://localhost:3030/%{env:MATCH_DATASET}/
    ProxyPassReverse /
</LocationMatch>

Auf der anderen Seite, auf dieser Seite und dass die Veröffentlichung von implizieren, dass die numerische Gruppen-index ($1) verwendet werden kann (als Hilfe-text gilt nur als der httpd 2.4.8, meine Verdacht /hoffe ist, dass die numerische Referenz funktioniert, bevor 2.4.8 (?)

In jedem Fall, ich habe dies ausprobiert:

<LocationMatch "/(experimental)/">
    ProxyPassMatch http://localhost:3030/$1/
    ProxyPassReverse /
</LocationMatch>

doch laut der Protokolle, die die internen Anruf ruft http://localhost:3030/$1/ statt http://localhost:3030/experimental/ bei der Beantragung der experimental Pfad auf dem vhost URL.

Den ProxyPassMatch docs nur sagen:

Wenn verwendet, innen ein LocationMatch Abschnitt, das erste argument weggelassen und das regexp ermittelt sich aus der LocationMatch.

Allerdings ist der text nicht die Mühe geben ein Beispiel dafür, wie zu kombinieren LocationMatch und ProxyPassMatch. Was mache ich falsch?

InformationsquelleAutor O. R. Mapper | 2014-02-04
Schreibe einen Kommentar