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