【发布时间】:2013-11-11 18:22:39
【问题描述】:
我在同一个 apache 服务器上有几个命名的虚拟主机,对于其中一个虚拟主机,我需要确保只允许访问一组特定的 IP 地址。
请建议最好的方法来做到这一点。我查看了 mod_authz_hosts 模块,但看起来我无法在虚拟主机内完成。
【问题讨论】:
我在同一个 apache 服务器上有几个命名的虚拟主机,对于其中一个虚拟主机,我需要确保只允许访问一组特定的 IP 地址。
请建议最好的方法来做到这一点。我查看了 mod_authz_hosts 模块,但看起来我无法在虚拟主机内完成。
【问题讨论】:
mod_authz_host 指令需要在 <Location> 或 <Directory> 块内,但我在 <VirtualHost> 中使用了前者,就像 Apache 2.2 一样:
<VirtualHost *:8080>
<Location />
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
...
</VirtualHost>
参考:https://askubuntu.com/questions/262981/how-to-install-mod-authz-host-in-apache
【讨论】:
对于 Apache 2.4,您可以使用 Require IP directive。所以只允许来自 192.168.0.0/24 网络的机器(范围 192.168.0.0 - 192.168.0.255)
<VirtualHost *:80>
<Location />
Require ip 192.168.0.0/24
</Location>
...
</VirtualHost>
如果你只是想让 localhost 机器能够访问,那么有一个特殊的Require local directive。
如果满足以下任一条件,则本地提供程序允许访问服务器:
- 客户端地址匹配127.0.0.0/8
- 客户端地址是::1
- 连接的客户端和服务器地址都相同
这提供了一种方便的方式来匹配源自本地主机的连接:
<VirtualHost *:80>
<Location />
Require local
</Location>
...
</VirtualHost>
【讨论】:
Require local。
localhost、127.0.0.1 和 ServerAlias 在您的虚拟主机中设置(加上 ipv6如果启用)。
如果您在虚拟主机中使用 apache 2.2,则应添加以下指令 (mod_authz_host):
Order deny,allow
Deny from all
Allow from 10.0.0.1
您甚至可以指定子网
Allow from 10.0.0
Apache 2.4 的配置看起来有点不同。 也许你最好指定你使用的是哪个版本的 apache。
【讨论】:
Allow from 192.168.1.0/24,IMO 更加惯用和灵活。
在 Apache 2.4 中,授权配置语法已更改,不应再使用 Order、Deny 或 Allow 指令。
这样做的新方法是:
<VirtualHost *:8080>
<Location />
Require ip 192.168.1.0
</Location>
...
</VirtualHost>
可以在 Apache 文档中找到使用新语法的更多示例:Upgrading to 2.4 from 2.2
【讨论】: