apache2:如何允许从文件访问

时间:2013-08-21 22:22:02

标签: apache .htaccess apache2 openvpn

我想根据某些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地址而不是端点...

1 个答案:

答案 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”。由于脚本每次都会运行而不是缓存的映射文件,因此重量轻一点。