Apache 2.4 mod_authz - RequireAny/All 并且需要有效用户

Apache 2.4 mod_authz - RequireAny/All and Require valid-user

我无法弄清楚如何使用 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

这工作正常,但问题是当我的目录有带有 AuthBasic 指令的 .htaccess 时,它不会提示输入 username/password。 我正在检查日志,似乎 RequireAny/All 允许访问而不提示输入密码。

.htacces 文件:

    AuthName "members"
    AuthType Basic
    AuthUserFile ./data/.htpasswd
    AuthBasicProvider file
    Require valid-user

如果我在 apache conf 文件中注释 Require 部分,它会提示输入 user/password。

我也尝试过使用 mod_compat 的旧配置,但配置没有按预期工作(它不会考虑列入白名单的 ips)。

感谢阅读post。 有什么建议吗?

我想我明白了,

正确的配置应该是这样的:

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

抱歉格式混乱