47

我在同一个 apache 服务器上有几个命名的虚拟主机,对于其中一个虚拟主机,我需要确保只允许访问一组特定的 IP 地址。

请建议最好的方法来做到这一点。我查看了 mod_authz_hosts 模块,但看起来我无法在虚拟主机内完成。

4

4 回答 4

54

The mod_authz_host directives need to be inside a <Location> or <Directory> block but I've used the former within <VirtualHost> like so for Apache 2.2:

<VirtualHost *:8080>
    <Location />
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    </Location>

    ...
</VirtualHost>

Reference: https://askubuntu.com/questions/262981/how-to-install-mod-authz-host-in-apache

于 2013-11-07T20:06:22.100 回答
43

对于 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>

如果你只是想让 localhost 机器可以访问,那么有一个特殊的Require local directive

如果以下任一条件为真,则本地提供者允许访问服务器:

  • 客户端地址匹配 127.0.0.0/8
  • 客户地址是::1
  • 连接的客户端和服务器地址都相同

这允许一种方便的方式来匹配源自本地主机的连接:

<VirtualHost *:80>
    <Location />
      Require local
    </Location>
    ...
</VirtualHost>
于 2016-12-12T16:11:13.277 回答
8

如果您在虚拟主机中使用 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。

于 2013-10-31T16:47:21.930 回答
4

在 Apache 2.4 中,授权配置语法已更改,不应再使用OrderDeny或指令。Allow

这样做的新方法是:

<VirtualHost *:8080>
    <Location />
        Require ip 192.168.1.0
    </Location>
    ...
</VirtualHost>

可以在 Apache 文档中找到使用新语法的更多示例:从 2.2 升级到 2.4

于 2017-05-05T08:48:53.953 回答