Wie schließe ich eine URL für Apache Mod_proxy aus?

23

Wir haben zwei Apache-Server als Front-End und 4 Tomcat-Server als Back-End mit mod_proxy-Modul als Load Balancer konfiguriert. Jetzt möchten wir eine einzelne Tomcat-URL vom mod_proxy-Load-Balancer ausschließen. Gibt es eine Möglichkeit oder Regel zum Ausschließen?

Proxy-Balancer-Einstellung:

<Proxy balancer://backend-cluster1>
   BalancerMember http://10.0.0.1:8080 loadfactor=1 route=test1 retry=10
   BalancerMember http://10.0.0.2:8080 loadfactor=1 route=test2 retry=10
</Proxy>
Mughil
quelle

Antworten:

38

Sie schließen Pfade von mod_proxy mit einem Ausrufezeichen (!) Vor Ihrer vollständigen ProxyPass-Anweisung aus, die in Ihrem Beispiel fehlt ProxyPass /path balancer://backend-cluster1. Fügen Sie daher Folgendes hinzu, um einen Pfad auszuschließen:

ProxyPass /my/excluded/path !

Vor

ProxyPass /my balancer://backend-cluster1
Alastair McCormack
quelle
Aber die URL, um Zugriff hinter dem ProxyBalancer zu haben
Mughil
Vielen Dank, fuzzyfelt. Ich frage Sie, wie Sie die URL ausschließen können, wenn wir den Proxy-Balancer konfiguriert haben. Ich habe die Proxy-Konfiguration in die Frage aufgenommen
Mughil
1
Siehe aktualisierte Antwort. Fügen Sie einen Ausschluss hinzu, bevor Sie den Pfad zum Proxypass definieren.
Alastair McCormack
2
Die Verwendung dieser Antwort hat sich hervorragend bewährt, um LetsEncrypt als Standardverzeichnis für bekannte Ordner für einen virtuellen Host zuzulassen, wenn ProxyPass verwendet wird, um dort einen Chat-Server anzuzeigen. Fügen Sie vor den anderen Anweisungen hinzu: ProxyPass /.well-known!
Professor Falken
2

Zusätzlich zur Antwort von Alastair McCormack: Wenn Sie verwenden <Location>, müssen Sie die folgende Ausnahme anstelle der vorherigen einfügen :

<Location /my/>
    ProxyPass balancer://backend-cluster1
</Location>

<Location /my/excluded/path/>
    ProxyPass !
</Location>
Rahmen
quelle
-2

Sie können über die Proxy-Direktiven eine Umschreibung setzen, die den Benutzern einen 404-Fehler anzeigt, wenn sie versuchen, auf die URL zuzugreifen, die Sie ausschließen möchten. Sie müssen rewrite_module aktivieren.

<Location ~ ^/urltoblock($|/)>
   RewriteEngine On 
   RewriteRule .* - [L,R=404]
</Location>
Pablo
quelle
Er sagte nichts darüber, dass er einen 404-Fehler haben wollte.
user207421