为什么我不能让 Apache2 从 /var/www 以外的目录为站点提供服务


Why can't I get Apache2 to serve sites from directories other than /var/www?

我有一个在VirtualBox环境中运行的Ubuntu 12.04服务器。 我用我的 Windows 系统设置了一个共享文件夹,这工作正常,直到我将 PHP 从 5.3.x 更新到 5.5.12。 我使用了一个新的 php 源代码,因为 apt-get 似乎没有让我升级到 5.3.x 以上。 在这个过程中,它也升级了apache2。 我最初忽略的一个区别是 vhost 配置文件不再是默认的或 mysite。 默认值现在为 000-default.conf。apache2.conf 仅用于加载以 .conf 结尾的配置文件的站点。

问题不在于我收到任何禁止的错误,而是 apache 忽略了任何指令,告诉它在/var/www 位置以外的其他地方使用文档根目录。 我与 VirtualBox 的共享目录是/media/sf_sandbox/- 这是 Ubuntu 目录。 我禁用了默认站点 000-default.conf 并启用了另外两个站点。 现在,sandbox.dev 使用 var/www 目录中的文件,而不是共享目录中的文件。 它忽略 sandbox.conf 文件中的指令。

我在某处读到apache默认情况下只会提供来自/var/www目录的文件,并且我可能必须将其他目录列入白名单。 它没有说如何做到这一点。 apache2.conf 文件确实具有从站点可用目录加载 *.conf 文件的指令。 不幸的是,它只是忽略了告诉我的文档根目录在我的网站上的位置的指令。 这发生在将 PHP 从 5.3.x 升级到 5.5.12 之后,这也升级了 apache2。

如何将其他目录列入白名单并告诉 apache 从指定位置提供文件?

首先,这确实属于服务器故障。也就是说,你问这个:

如何将其他目录列入白名单并告诉 apache 提供文件 从指定的位置?

Apache没有所谓的"白名单"。它可以从系统上的任何位置提供内容。即使您有固定的DocumentRoot也可以随时使用 Alias .Apache是灵活的。

因此,您似乎面临的是配置问题。而已。仅此而已。 只需找到配置文件并根据需要进行调整,一切都应该很好。

意思是,当您运行以下命令时,您会看到什么,列出sites-available

ls -la /etc/apache2/sites-available

与这个命令相比,sites-enabled

ls -la /etc/apache2/sites-enabled

sites-available的内容是真实的配置文件。sites-enabled中的项目只是指向 sites-available 中的文件的符号链接。所以当你这样说时:

默认值现在为 000-default.conf。

你可能会混淆。由于sites-enabled中的000-default.conf只是一个符号链接,指向 Apache 实际读取配置的sites-available default。例如,我所在的 Ubuntu 12.04 服务器上的sites-available内容是:

ls -la /etc/apache2/sites-available
-rw-r--r-- 1 root root  913 Apr 15 16:15 default
-rw-r--r-- 1 root root 7469 Feb 14  2012 default-ssl

那么在sites-enabled中它是:

ls -la /etc/apache2/sites-enabled
lrwxrwxrwx 1 root root   26 Jan 11  2013 000-default -> ../sites-available/default

请注意,000-default只是指向../sites-available/default的符号链接,这基本上是/etc/apache2/sites-available/default

过去,您需要提供更多详细信息或查看配置的位置。您甚至可以尝试运行此命令以查看您的活动 Apache 服务器当前正在管理哪些虚拟主机:

sudo apachectl -S

编辑:似乎原始海报在sites-enabled中没有000-default。因此,可以使用如下所示的新符号链接来修复此问题:

sudo ln -s /etc/apache2/sites-available/default /etc/apache2/sites-enabled/000-default

然后使用sudo service apache2 restart重新启动 Apache 并重试。希望这就是问题所在。 请注意,当default作为符号链接sites-enabled时,000-default重命名的原因是确保这是加载的第一个配置。