2

我想根据某些 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

有人知道该怎么做吗?如果那不可能,还有其他方法可以做这样的事情吗?

PS:为了清楚起见,我的最终目的是获取连接到本地 VPN (OpenVPN) 的 IP,如果尚未包含 IP,则使用该 IP 完成一个文件,然后重新启动 apache2 以便它可以考虑它们。这有点奇怪,但在同一台服务器上,我有 html 内容,我只想由 vpn 用户访问。但是即使我通过vpn,apache2看到的远程IP地址不是端点...

4

1 回答 1

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”。这有点不那么轻量级,因为脚本每次都会运行,而不是缓存的地图文件。

于 2013-08-21T22:35:56.463 回答