Назад | Перейти на главную страницу

Разрешить ProxyPass только для некоторых IP-адресов

С помощью следующего фрагмента каждый может получить доступ как к / 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-адреса, возможно ли это?

Ответ должен быть следующим. Я включил IP-адрес и подсеть в одно правило для тех, кому нужно разрешить целую подсеть, а не набор отдельных 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>
<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 здесь подразумевается как цель блока местоположения.

Я думаю, ты можешь использовать SetEnvIf директива проверки удаленного адреса (Remote_Addr).

С одним IP:

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)

Надеюсь, поможет.