web-dev-qa-db-ja.com

一部のIPに対してのみProxyPassを許可する

次のスニペットを使用すると、誰もが/ fooと/ barの両方にアクセスできます

ProxyPass /foo http://example.com/foo
ProxyPassReverse /foo http://example.com/foo 
ProxyPass /bar http://example.com/bar
ProxyPassReverse /bar http://example.com/bar

しかし、誰もが/ fooにアクセスでき、/ barが特定のIPからのリクエストにのみアクセスできるようにしたい場合はどうすればよいでしょうか。

6
mobmad

リモートアドレスをチェックするSetEnvIfディレクティブを使用できると思います(Remote_Addr)。

IPが1つの場合:

SetEnvIf Remote_Addr "123.123.123.123" TRUST=yes

正規表現による複数のIPの確認

SetEnvIf Remote_Addr "123\.123\.123\.123|134\.134\.(134\.(134|134)|134\.134)" TRUST=yes

あなたがこれを直接行うことができるかわかりません:

ProxyPass /foo http://example.com/foo env=TRUST

しかし、おそらくあなたは書き換えルールを操作して同じ結果を得ることができます...

たとえば、信頼されないすべてのIP(env=!TRUST

それが役に立てば幸い。

3
tmow

答えは次のようになります。単一のIPのセットではなくサブネット全体を許可する必要がある人のために、1つのルールにIPとサブネットを含めました。

<Location /foo>
    Deny from all                       // **This rule is the most IMPORTANT**    
    Allow from 192.168.1.2 10.100       // The second value implies 10.100.0.0/16 subnet
    ProxyPass http://example.com/foo
    ProxyPassReverse http://example.com/foo
</Location>
5
Rumesh Bandara
<Location /bar>
    Allow from 1.2.3.4 2.3.4.5 ...
    ProxyPass http://example.com/bar
    ProxyPassReverse http://example.com/bar
</Location>

ここでは、ProxyPassおよびProxyPassReverseの最初の引数がロケーションブロックのターゲットであることを示しています。

4
Kenster