Apache基本身份验证,但允许的除外

时间:2010-11-05 00:57:42

标签: apache authentication basic-authentication

问题:我在/ var / www / files /下有一些文件,我希望从特定的IP地址访问它们而不需要用户/密码。但是,我希望任何其他IP地址都应该要求登录才能获得访问权限。

这是在我的httpd.conf中:

<Directory /var/www/files/>
        Order deny,allow
        Deny from all
        Allow from 192.168 
        AuthUserFile /etc/apache2/basic.pwd 
        AuthName "Please enter username and password" 
        AuthType Basic 
        Require user valid-user 
</Directory>

但是,如果我理解正确,这意味着任何来自192.168。*的客户端都可以访问该目录,但是需要有效用户才能查看其内容。任何其他IP地址都将被拒绝。正确?

提前谢谢。

5 个答案:

答案 0 :(得分:39)

这是Apache 2.4+的完成方式(因为不再支持Satisfy Any)。

<Directory /var/www/files/>

    AuthType Basic
    AuthName "Please enter your username and password"
    AuthUserFile /var/www/files/.htpasswd

    <RequireAny>
      Require ip 22.33.44.55
      Require valid-user
    </RequireAny>

</Directory>

如果您想同时要求IP地址 - 并且 - 登录/密码,请将<RequireAny>更改为<RequireAll>

我希望这对某人有所帮助 - 因为我花了一段时间才弄明白。

答案 1 :(得分:13)

编辑:这可能是接受的答案,但旧的。对于新的Apache安装,请使用Brians answer here

添加:Satisfy Any(这意味着应该传递其中任何一个)。

语法是:

Require valid-user

或者:

Require user <userid>

答案 2 :(得分:3)

如果您的服务器位于代理服务器后面,则无法直接依赖Require ip。但是,您可以使用Require env

<Directory /var/www/files/>

    AuthType Basic
    AuthName "Please enter your username and password"
    AuthUserFile /var/www/files/.htpasswd

    SetEnvIF X-Forwarded-For "22.33.44.55" AllowIP

    <RequireAny>
      Require env AllowIP
      Require valid-user
    </RequireAny>

</Directory>

The source of the idea

答案 3 :(得分:1)

cron(0 1 * * ? *)

还检查了许多变种。这个代码üorks与2.4版本的apache 100%

答案 4 :(得分:1)

在Apache 2.4+上,如果您还希望基于IP块设置固定的用户名,则可以将AuthBasicFake指令与运行时If指令一起使用。

此示例具有直接访问22.33.44.55/3266.77.88.99/32并设置用户名demouser的权限,所有其他用户都必须登录。

<Location>
    AuthType Basic
    AuthName "Please enter your username and password"
    AuthUserFile /var/www/files/.htpasswd

    <If "-R '22.33.44.55/32' || -R '66.77.88.99/32'">
        AuthBasicFake demouser
        Require all granted
    </If>
    <Else>
        Require valid-user
    </Else>
</Location>