我的(Debian 风格,分割文件)配置中有以下内容
<VirtualHost *>
ServerName www.example.org
DocumentRoot /var/www/example
CustomLog /var/log/apache2/example/access.log combined
<Directory /var/www/example/subdir/admin/>
AllowOverride All
AuthType Basic
AuthName "admins only"
AuthUserFile /etc/apache2/pass.txt
Require valid-user
</Directory>
</VirtualHost>
它被忽略,即我可以浏览该目录中的文件,没有登录提示。我已经设置了LogLevel debug
并且我看到了
AH01628: authorization result: granted (no directives)
日志行是由创建的,[authz_core:debug]
因此它似乎认识到授权行的存在,只是不需要实际进行一些授权。
即使替换valid-user
为也all denied
没有效果。
我似乎拥有我需要的所有模块。
我尝试.htaccess
在另一个目录中添加 a 并记录“此处不允许 AuthType”。
我AllowOverride All
几乎在所有允许的地方都有。
类似的问题还没有找到适合我的解决方案。请告诉我如何解决此问题,我很乐意尝试并报告。
答案1
这不是一个明确的答案,但我可以报告我是如何解决它的。
所有 http 请求都被重定向到 https,尽管我不清楚这是在哪里完成的。这意味着 *:80 的虚拟主机被忽略,而 *:443 的虚拟主机被使用。我将身份验证内容移至 *:443 vhost,并在其前面加上“要求全部拒绝”,现在它请求登录。这是虚拟主机中包含的代码
<Directory /subdir/>
Require all denied
</Directory>
<Location /subdir/>
AllowOverride All
AuthType Basic
AuthName "admins only"
AuthUserFile /etc/apache2/userpass.txt
AuthGroupFile /etc/apache2/group
Require group admins
</Location>
任何人都可以改进或简化这个,请这样做。
答案2
这是一个常见问题。这阿帕奇文档建议使用该<Location />
指令而不是<Directory />
.以下示例 VirtualHost 应该为您提供功能性基本身份验证:
<VirtualHost *:80>
ServerName example.com
DocumentRoot "/srv/www/htdocs/"
<Location />
AuthType Basic
AuthName "Authorized Access Only"
AuthUserFile /etc/apache2/auth/htpass
AuthGroupFile /etc/apache2/auth/group
Require group myusers
</Location>
<Directory "/srv/www/htdocs/">
Require all granted
</Directory>
</VirtualHost>
htpass 文件是使用htpasswd -c /etc/apache2/auth/htpass myname
组文件(可选!)生成的,使用以下语法(相对于上面的虚拟主机示例):
myusers: myname myfriend mycolleague
htpasswd 以及组文件需要可由运行 Apache 的用户读取。
答案3
在代理虚拟机中,您可以在块中包含身份验证代码。
<proxy *>
AllowOverride All
AuthType Basic
AuthName "admins only"
AuthUserFile /etc/apache2/userpass.txt
AuthGroupFile /etc/apache2/group
Require group admins
</proxy>
仍然可以工作。