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>
抱歉格式混乱
我无法弄清楚如何使用 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>
抱歉格式混乱