我正在尝试设置反向代理,以仅允许少数选定的 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.
答案1
下列应该仅在允许使用子域名的情况下才有效应该我目前无法测试它...
然而逻辑应该可行。
使用将 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>
答案2
您需要将 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 中有效。