Apache 2.4 Proxy für extern, Redirect für intern

7

Ich versuche, einen Reverse-Proxy einzurichten, damit nur einige ausgewählte IP-Bereiche einen Proxy für einen internen Host erstellen können, während ich möchte, dass alle anderen Benutzer, die nicht zu den IP-Bereichen gehören, zu unserem internen benannten Host umleiten. In diesem Setup funktioniert der Webservice, während jeder, der nicht über VPN in unser Netzwerk eingebunden ist, nicht zur internen Ressource navigieren kann. Ich habe versucht, dies ohne Glück zum Laufen zu bringen. Meine Teilkonfiguration lautet derzeit wie folgt:

       ProxyRequests Off
    <Proxy *>
            Allow from all
    </Proxy>
    <Location />
            Allow From xxx.xxx.xxx.xxx/24 1xxx.xxx.xxx.xxx/23
            Deny From All
            ProxyPass http://server.local.corp:8000/
            ProxyPassReverse http://server.local.corp:8000/
    </Location>

Diese Konfiguration scheint gut zu funktionieren, um zu verhindern, dass andere IP-Bereiche Proxys verwenden können. Ich bin jedoch unklar, wie ich eine Weiterleitungsanweisung für andere Personen hinzufügen kann.

Bearbeiten Ausgehend von der ersten Antwort sieht mein Code jetzt so aus:

<If "%{REMOTE_ADDR} -ipmatch 'xxx.xxx.xxx.xxx/24'">
  ProxyPass / http://server.local.corp:8000/
  ProxyPassReverse / http://server.local.corp:8000/
</If>

Und Apache löst beim Neustart den folgenden Fehler aus:

ProxyPass cannot occur within <If> section
Action 'configtest' failed.
The Apache error log may have more information.
Brian
quelle
Ich habe den gleichen Fehler in Bezug auf ProxyPass und den Abschnitt <If>
Jordan Sitkin

Antworten:

1

Folgendes sollte funktionieren, wenn Sie Subdomains verwenden dürfen, nur sollte ich es im Moment nicht testen können ...

Die Logik sollte jedoch funktionieren.

Verwenden Sie die, um XTERNs in eine Unterdomäne umzuleiten, z. xtern.example.com und lösen Sie die Dinge mit virtuellen Hosts!

<VirtualHost *:80>
    ServerName example.com

    <If "%{REMOTE_ADDR} !-ipmatch 'xxx.xxx.xxx.xxx/24'">
        Redirect "/" "http://xtern.example.com"
    </If>


    ProxyPass http://server.local.corp:8000/
    ProxyPassReverse http://server.local.corp:8000/
</VirtualHost>

<VirtualHost *:80>
    ServerName xtern.example.com

    ProxyPass http://server.xtern.corp:8000/
    ProxyPassReverse http://server.xtern.corp:8000/
</VirtualHost>
Halbbit
quelle
0

Sie müssen Ihre ProxyPass- und Redirect-Anweisungen in die neu eingeführte If-Anweisung einschließen: <If expression> ProxyPass… </ If> "

Werfen Sie einen Blick auf http://httpd.apache.org/docs/2.4/mod/core.html#if mehr über die Ist - Richtlinie , um herauszufinden, und http://httpd.apache.org/docs/2.4/expr .html , um zu lernen, wie man einen Apache-Ausdruck schreibt (-ipmatch scheint das zu sein, wonach Sie suchen)

Beachten Sie, dass dies nur in Apache httpd 2.4 gültig ist.

alxgomz
quelle
3
Apache 2.4 erlaubt keinen ProxyPass innerhalb des Abschnitts <Wenn>
Javier Méndez
1
hmmm .. Ich kann mich nicht erinnern, ob ich es getestet habe oder nicht, aber das ist seltsam, weil im Dokument eindeutig angegeben ist, dass in diesem Konfigurationsabschnitt nur Anweisungen verwendet werden können, die den Verzeichniskontext unterstützen. Das ist der Fall von "ProxyPass" ...
Alxgomz
Ich habe es getestet :) - und es zeigt diesen Fehler (bearbeiten: mit Apache / 2.4.25 (Unix))
Javier Méndez
Ref: Apache Bug # 54965
Jesse Glick