我们有一个前端代理服务器,为后端网站的页面提供服务(均运行 Apache 2.4):
# Apache config snippet from frontend server
SSLProxyEngine on
ProxyPass "/blah" "https://backend.invalid/blah"
ProxyPassReverse "/blah" "https://backend.invalid/blah"
(换句话说,访问以下任何内容https://frontend.invalid/blah实际上从后端站点检索内容。这按预期工作。)
为了在后端站点上进行一些维护工作,我现在只想允许从某些 IP 范围(例如Require ip 123.123 172.20.0.0/16
(等,对于多个范围))以及所有请求访问代理(和后端站点)不是在这些范围内,将这些请求重定向到具有状态页面的不同站点。
我怀疑这将需要一些相当复杂的mod_rewrite
配置(始终是“需要几杯咖啡”的任务)和/或可能使用If
和Else
指令。
有人能建议如何最好地(或者也许是最简单地)进行设置吗?
答案1
除非我在您的用例中遗漏了某些内容,否则您可能可以简单地使用<If>
带有-ipmatch
操作员,结合一个Redirect
操作说明。
<If "! ( %{REMOTE_ADDR} -ipmatch '172.20.0.0/16' )">
Redirect https://other.com/...
</If>
如果您需要打开发起请求的用户代理的原始 IP(而不是(可能)代理源 IP),则还要启用mod_remoteip模块并使用变量CONN_REMOTE_ADDR
代替REMOTE_ADDR
.
(……所以也许任务的时间仅仅够喝几口咖啡;)