这是我的虚拟主机配置:
<VirtualHost *:80>
DocumentRoot /home/user1/htdocs/folder1
ServerName folder1.hostname.tld
<Directory /home/user1/htdocs/folder1>
AuthType Digest
AuthName "private"
AuthUserFile /home/user1/passwd
Require user superman
#Order allow,deny
#Allow from all
</Directory>
</VirtualHost>
我已添加用户:
htdigest -c /home/user1/passwd private superman
Apache 在其日志中不断给出以下信息:
client denied by server configuration: /home/user1/htdocs/folder1/
我不知道哪里出了问题...Apache 有权读取密码文件。此外,如果我注释掉 AuthDigest... 行并取消注释 Order 和 Allow,Apache 会顺利地提供该文件夹。Apache 会以 403 响应我,并且不会提示我的浏览器输入用户/密码。
有什么帮助吗?
答案1
看一下Satisfy
Apache 的配置指令。
默认情况下,它设置为all
(而不是any
),这意味着两个都Allow
和指令Require
必须满足。通过注释掉Allow
,无论身份验证如何,您都会拒绝任何人的访问。
重新启用Allow
将不会绕过已知主机的身份验证,并且会执行您想要的操作。或者,您也可以设置Satisfy any
,并将 注释掉Allow from all
。然后您可以使用Allow
来指定可以绕过身份验证的主机。
答案2
在我的 CentOS 服务器上,当我将受密码保护的文件夹移至用户目录时,我能够重现您的问题。如果受保护的文件夹位于默认位置(作为 /var/www/html 内的子文件夹),则不会出现问题。但如果受密码保护的文件夹位于用户主目录中,Apache 就会出错。
如果您正在运行 Red Hat Linux 衍生版本(例如 Red Hat Enterprise Linux、CentOS 或 Fedora Core),则 SELinux 可能是导致此问题的原因。要测试这一点,请运行以下命令暂时禁用 SELinux:
echo 0 > /selinux/enforce
然后尝试访问网页。对我来说,这解决了问题,Apache 能够正确地提示我用户名和密码,然后访问网站。然后要修改 SELinux,您可以使用氯乙烯命令来更改文件或目录的 SELinux 安全上下文。
chcon -Rv --type=httpd_sys_content_t /home/user1/
有关如何使用 chcon 进行此更改的更多信息和细节,请查看CentOS 维基。