为什么 Apache 会用这个目录别名说“文件不存在”?

为什么 Apache 会用这个目录别名说“文件不存在”?

我正在设置一个小型 Web 服务器。我遇到了 Apache 无法找到别名的问题。我的 DocumentRoot 是 /var/www/htdocs,但我在 /home/user/Documents/a_directory/CurrentCaptures 下的另一个(更大的)分区上有一些文件,我希望能够在网站上查看这些文件。

我的 /var/www/conf/httpd.conf 有 2 个别名,如下所示:

Alias /icons/ "/var/www/icons/"

<Directory "/var/www/icons/">
    Options Indexes
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

# Added by me
Alias /CurrentCaptures "/home/user/Documents/a_directory/CurrentCaptures"

<Directory "/home/user/Documents/a_directory/CurrentCaptures">
    Options Indexes
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

我把/icons/别名留在那里进行测试,如果我http://localhost/icons/在浏览器中访问,它就可以正常工作。但是当我尝试访问时,http://localhost/CurrentCaptures/我收到 404 Not Found 错误。

在 /var/www/logs/error_log 中我收到此错误:

[2014 年 8 月 4 日星期一 11:02:30] [错误] [客户端 192.168.10.100] 文件不存在:/home/user/Documents/a_directory/CurrentCaptures/

有任何想法吗?

答案1

Apache 进程很可能没有进入 /home/user 的权限。

Apache 通常以非特权用户身份运行(通常称为“http”、“httpd”或“www-data”,但存在变体)。该用户无权进入其他用户的主目录。

如果你不担心安全问题,解决这个问题的最简单方法是添加目录的全局执行权限(例如模式 0711),以及您想要提供给 Web 服务器的文件的全局读取权限(0644)。在目录中,“执行”表示进入,而“读取”表示列出目录中的文件。因此,通过授予执行权限,您允许 Web 服务器读取已知文件(受文件权限限制),但不能枚举目录的内容。

更“正确”的解决方案可以将文件移动到非用户特定的目录层次结构中。例如,您可以通过将文件移动到其他位置(特定用户的主目录之外)或使用绑定挂载来实现这一点。文件权限仍然有效,因此 Web 服务器需要能够读取这些文件,但您不需要授予 Web 服务器对您的主目录的任何访问权限。

相关内容