web-dev-qa-db-ja.com

外部用のApache2.4プロキシ、内部用のリダイレクト

リバースプロキシを設定して、いくつかの選択したIP範囲のみが内部ホストにプロキシできるようにしようとしていますが、IP範囲内にない他の人は、内部の名前付きホストにリダイレクトしたいと思います。この設定では、Webサービスは機能しますが、ネットワークにVPN接続されていない人は、内部リソースに移動できません。私はこれを運がなくても機能するようにしてきました、私の部分的な設定は現在次のとおりです:

       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>

この構成は、他のIP範囲がプロキシできないようにブロックするためにうまく機能しているように見えますが、他の人にリダイレクトステートメントを追加する方法がわかりません。

編集最初の回答からアドバイスを受けると、私のコードは次のようになります。

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

また、Apacheは再起動時に次のエラーをスローします。

ProxyPass cannot occur within <If> section
Action 'configtest' failed.
The Apache error log may have more information.
7
Brian

次のshouldは、サブドメインの使用が許可されている場合にのみ機能しますshould現時点ではテストできません...

ただし、ロジックは機能するはずです。

を使用して、XTERNをサブドメインにリダイレクトします。 xtern.example.comと仮想ホストで問題を解決してください!

<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>
1
halfbit

ProxyPassおよびRedirectディレクティブを新しく導入されたIfステートメントにラップする必要があります:<If式> ProxyPass…</ If> "

http://httpd.Apache.org/docs/2.4/mod/core.html#if を見て、Ifディレクティブの詳細を確認してください。 http:// httpd.Apache.org/docs/2.4/expr.html Apache式の記述方法を学ぶ(-ipmatchはあなたが探しているもののようです)

これはApache httpd 2.4でのみ有効であることに注意してください。

0
alxgomz