Я пытаюсь настроить обратный прокси-сервер, чтобы разрешить только несколько выбранных диапазонов IP для прокси-сервера на внутренний хост, в то время как я хотел бы, чтобы кто-либо другой, не входящий в диапазоны IP, перенаправлял на наш внутренний именованный хост. В этой настройке веб-сервис будет работать, в то время как любой, кто не подключен к нашей сети через 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.
Последующий должен работать, если вам разрешено использовать поддомены, только должен Я не могу сейчас это проверить ...
Однако логика должна работать.
Используйте для перенаправления 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>
Вам необходимо заключить директивы ProxyPass и Redirect во вновь введенный оператор If: <If expression> 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.