如何在 Ubuntu 下修复 apache 错误“不在配置的 docroot 中”

Posted

技术标签:

【中文标题】如何在 Ubuntu 下修复 apache 错误“不在配置的 docroot 中”【英文标题】:How do fix apache error "not within configured docroot" under Ubuntu 【发布时间】:2012-01-02 17:56:23 【问题描述】:

问候专家和大师,我正在寻求有关 apache php 配置问题的帮助。

一段时间以来,我一直在 ubuntu 服务器上使用 apache2 设置运行多个网站,在我的 etc/apache2/conf.d/virtual.conf 文件中使用 NameVirtualHost * 行没有问题。我最近将服务器版本更新为最新的 lts 版本,我现在无法运行 php 文件。

我正在为位置“/home/www/[site-name]/htdocs”运行我的所有站点,并且我已经在 /etc/apache2/sites-available 中设置并启用了我的所有站点。我还禁用了默认站点。

对于每个站点文件,我都指定了以下内容:

    # Indexes + Directory Root.
    # DirectoryIndex index.html index.htm index.php
    DocumentRoot /home/www/[site-name]/htdocs/

    # CGI Directory
    ScriptAlias /cgi-bin/ /home/www/[site-name]/cgi-bin/
    <Location /cgi-bin>
            Options +ExecCGI
    </Location>

    # Logfiles
    ErrorLog  /home/www/[site-name]/logs/error.log
    CustomLog /home/www/[site-name]/logs/access.log combined

我重新启动 apache 并在我的服务器上输入 php 测试页面的 url,我遇到了“内部服务器错误”。当我检查错误日志时,我得到:

脚本“/home/www/[site-name]/htdocs/test.php”解析为“/home/www/[site-name]/htdocs/test.php”不在配置的 docroot 中。

【问题讨论】:

你运行的是 suPHP 还是 PHP?这个page 解释了如何修复这些 suPHP 错误。 只是标准的 php5,因此我认为这不是我的答案 两个建议,在阅读下面的条目后。 #1) 卸载 suPHP #2) 在this example for Ubuntu 11.04 之后安装 PHP。 (假设你在 11.04) 【参考方案1】:

由于某种原因,在查看错误时,suphp 出现了很多。根据this link:

不要误以为这与 Apche 虚拟主机文档根目录有关,这实际上是 suphp 配置文件中的另一个设置。包括包含 RoundCube 脚本的路径修复了这一问题。例如: docroot=/var/www:/usr/share/roundcube:/var/lib/roundcube:$HOME/public_html

您需要编辑您的/etc/suphp/suphp.conf 文件并将docroot 更改为适当的值。

【讨论】:

我还看到了很多与此错误相关的 suphp 帖子,我不知道这与我的问题有什么关系,但为了尝试一切,我尝试在suphp.conf文件,重启apache,问题依旧 我将我的项目保存在/data/web/projects 下,例如/data/web/projects/sample-project,所以我将/data/web/projects 添加到 suphp.conf 中的 docroot 变量中,一切都按需要工作。谢谢@Mike【参考方案2】:

您似乎错过了每个站点名称的虚拟主机配置:

<VirtualHost IP:80>
    ServerName      yourdomainname
    ServerAlias  www.yourdomainname
    DocumentRoot /home/www/[site-name]/htdocs/
    ScriptAlias /cgi-bin/ /home/www/[site-name]/cgi-bin/
    <Location /cgi-bin>
        Options +ExecCGI
    </Location>
    ErrorLog        /home/www/[site-name]/logs/yourdomainname.ua-error.log
    CustomLog       /home/www/[site-name]/logs/yourdomainname-access.log combined
</VirtualHost>

<Directory "/home/www/[site-name]/htdocs/">
    Options         FollowSymLinks
    AllowOverride   None
    Order           allow,deny

    <Limit GET POST OPTIONS>
        Order allow,deny
        Allow from all
    </Limit>

    <LimitExcept GET POST OPTIONS>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>

【讨论】:

目前我的虚拟主机配置定义为 目前我的配置和您的示例之间的唯一区别是虚拟主机在每个文件中定义为 。我知道这是一个包罗万象的方法,而不是特定于端口 80,但迄今为止它一直有效。我尝试按照您的建议更改它,以防万一它有效果并重新启动 apache,但我仍然遇到同样的问题。 当然,为了启用我想要的网站,我使用了“sudo a2ensite [site-name]”。要禁用默认站点,我使用'sudo a2dissite default' 看来你真的有 suphp 的问题。你能试着用 suphp 找到任何东西,比如 suPHP_Engine on 据我所知我没有使用suPHP,至少我从来没有故意安装它,但如果我错了请纠正我?【参考方案3】:

感谢大家的帮助,我终于到了那里。看来升级到 Ubuntu 10.04 开启了 suPHP。它最终成为一件好事,因为我收到错误的原因归结为我的 htdocs 中的文件管理变得草率。

为了解决我的问题,我必须做几件事:

首先我在 /etc/apache2/sites-available/[site-name] 中打开了 suphp 错误消息。这给了我真正的错误,它告诉我我的某些页面的权限错误。然后我将 www 中的所有文件夹权限设置为 755,将文件设置为 644。我还必须将 suphp.conf 中的 min_uid 和 min_gid 文件降低到 33。

【讨论】:

以上是关于如何在 Ubuntu 下修复 apache 错误“不在配置的 docroot 中”的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 postgres 安装 ubuntu 上的错误

如何在 Ubuntu Apache 中启用错误日志

如何使用certbot修复错误设置SSL?

如何修复 Ubuntu 中检测到系统程序错误的问题

如何修复 Hadoop 警告:在 Ubuntu 上发生非法反射访问操作错误

如何在 apache windows 10 中使用烧瓶修复错误 500