我有问题弄清楚如何使用mod_authz_core创建正确的apache 2.4配置,特别是使用RequireAny / All和Require valid-user的组合。
我需要这样的配置:网络已阻止来自指定国家/地区的访问权限,但我有特定IP地址的列表,必须列入白名单并且可以访问网络(即使是来自阻止的国家/地区) 并且网站的一部分需要从.htaccess文件
进行AuthBasic身份验证首先,我正在尝试将旧的apache配置从2.2迁移到apache 2.4。
旧配置:
#blocation for specified countries
SetEnvIf GEOIP_COUNTRY_CODE AB BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AC BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AD BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AE BlockCountry
<LocationMatch "/*">
Order deny,allow
deny from .zx
deny from env=BlockCountry
allow from 127.0.0.1
Include "/etc/httpd/conf/permited-xx-ip.include.old"
</LocationMatch>
这项工作在apache 2.2上绝对正常。 我将其改为此以匹配新的apache 2.4
<LocationMatch "/.*">
<RequireAny>
<RequireAll>
Require all granted
Require not host .xx
Require not env BlockCountry
</RequireAll>
<RequireAny>
Require local
Include "/etc/httpd/conf/permited-xx-ip.include"
</RequireAny>
</RequireAny>
</LocationMatch>
文件/etc/httpd/conf/permited-xx-ip.include包含以下行:
Require ip x.x.x.x
这样工作正常,但问题是当我的目录中有.htaccess和AuthBasic指令时,它不会提示输入用户名/密码。 我正在检查日志,似乎RequireAny / All允许访问而不提示输入密码。
.htacces文件:
AuthName "members"
AuthType Basic
AuthUserFile ./data/.htpasswd
AuthBasicProvider file
Require valid-user
如果我在apache conf文件中评论Require部分,它将提示用户/密码。
我还尝试使用mod_compat进行旧配置,但配置无法按预期工作(它不会考虑列入白名单的ips)。
感谢您阅读长篇文章。 有什么建议吗?
答案 0 :(得分:1)
我想我想通了,
正确的配置应如下所示:
<Directory /var/www/www-root>
<RequireAny>
<RequireAll>
Require all granted
Require not host .xx
Require not env BlockCountry
</RequireAll>
<RequireAny>
Require local
Include "/etc/httpd/conf/permited-ip.include"
</RequireAny>
</RequireAny>
</Directory>
加上AuthBasic .htaccess
目录的配置:
<Directory /var/www/www-root/dirwithauthbasic>
<RequireAll>
<RequireAny>
<RequireAll>
Require all granted
Require not host .xx
Require not env BlockCountry
</RequireAll>
<RequireAny>
Require local
Include "/etc/httpd/conf/permited-ip.include"
</RequireAny>
</RequireAny>
Require valid-user
</RequireAll>
</Directory>
抱歉搞乱格式