问题:我在/ 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地址都将被拒绝。正确?
提前谢谢。
答案 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>
答案 3 :(得分:1)
cron(0 1 * * ? *)
还检查了许多变种。这个代码üorks与2.4版本的apache 100%
答案 4 :(得分:1)
在Apache 2.4+上,如果您还希望基于IP块设置固定的用户名,则可以将AuthBasicFake指令与运行时If指令一起使用。
此示例具有直接访问22.33.44.55/32
和66.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>