Apache 2.4:按 IP 范围限制对反向代理的访问,并重定向来自所有其他主机的请求

Apache 2.4:按 IP 范围限制对反向代理的访问,并重定向来自所有其他主机的请求

我们有一个前端代理服务器,为后端网站的页面提供服务(均运行 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配置(始终是“需要几杯咖啡”的任务)和/或可能使用IfElse指令。

有人能建议如何最好地(或者也许是最简单地)进行设置吗?

答案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.

(……所以也许任务的时间仅仅够喝几口咖啡;)

相关内容