我在同一个 apache 服务器上有多个命名虚拟主机,对于其中一个虚拟主机,我需要确保只允许访问一组特定的 IP 地址。
请建议最好的方法。我已经查看了 mod_authz_hosts 模块,但看起来我无法在虚拟主机内执行此操作。
对于 Apache 2.4,您将使用 Require IP 指令。因此,仅允许来自 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>
如果您只希望本地主机能够访问,那么有一个特殊的 Require local 指令。
如果满足以下任一条件,则本地提供商允许访问服务器:
- 客户端地址匹配127.0.0.0/8
- 客户地址是::1
- 连接的客户端和服务器地址都是相同的
这提供了一种便捷的方式来匹配源自本地主机的连接:
<VirtualHost *:80>
<Location />
Require local
</Location>
...
</VirtualHost>
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.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 版本。
在 Apache 2.4 中,授权配置语法已更改,不应再使用
Order
、Deny
或 Allow
指令。
执行此操作的新方法是:
<VirtualHost *:8080>
<Location />
Require ip 192.168.1.0
</Location>
...
</VirtualHost>
使用新语法的更多示例可以在 Apache 文档中找到:从 2.2 升级到 2.4