我想根据某些IP来限制对文件夹的访问。
我已经知道如何通过
来做到这一点<Directory "/path/to/my/directory/">
Order Deny,Allow
Deny from all
Allow from 123.123.123.1 # IP 1
Allow from 123.123.123.2 # IP 2
Allow from 127
</Directory>
由于我想以不同方式管理允许的IP列表,我宁愿从文本文件中允许它们,其中IP可以是这样的注释:
123.123.123.1
123.123.123.2
有人知道怎么做吗?如果那不可能有另一种方法来做这件事吗?
P.S。:为了使一切清楚,我的最终目的是获取连接到本地VPN(OpenVPN)的IP,如果尚未包含IP,则使用IP完成文件并重新启动apache2以便它可以考虑它们。这有点奇怪,但在同一台服务器上,我有html内容,我只想由vpn用户访问。但即使我通过vpn,apache2也会看到远程IP地址而不是端点...
答案 0 :(得分:0)
您不能在apache配置中包含额外的文件,就像您想要做的那样,但您可以使用mod_rewrite的RewriteMap指令来使用映射文件,或运行脚本。
例如,您可以创建地图:
RewriteMap allow_ips txt:/path/to/ipfile.txt
在/path/to/ipfile.txt
你有
123.123.123.1 1
123.123.123.2 1
123.123.123.4 1
123.123.123.10 1
然后在你的目录容器中:
RewriteEngine On RewriteCond $ {allow_ips:%{REMOTE_ADDR} | 0} 0 RewriteRule ^ - [L,F]
映射正在条件中使用:${allow_ips:%{REMOTE_ADDR}|0}
。如果远程地址在/path/to/ipfile.txt
中,则映射将返回“1”,否则返回“0”,这将满足条件,规则将拒绝访问。
这种映射的问题是你需要在每个IP的末尾加上“0”以外的东西(为了形成地图)。
另一种选择是编写脚本并使用prg
地图类型。该脚本将在不同的文件中查找IP并返回适当的“1”或“0”。由于脚本每次都会运行而不是缓存的映射文件,因此重量轻一点。