apache suexec“命令不在docroot中”

时间:2013-09-25 12:10:53

标签: linux perl apache suexec

错误信息是:

command not in docroot (/home/site1/cgi-bin/test.pl).

Here我发现了这个:

  

suexec要求CGI脚本位于服务器的DocumentRoot(而不是VirtualHost DocumentRoot)下。但是,允许VirtualHost DocumentRoot成为真实DocumentRoot下显示的目录的符号链接。

虚拟主机配置的一部分是:

[...]
DirectoryIndex index.html index.html index.php
DocumentRoot /home/site1/htdocs

SuexecUserGroup site1 site1

ScriptAlias /cgi-bin/ /home/site1/cgi-bin/
<Location /home/site1/cgi-bin>
           Options +ExecCGI
</Location>

<Directory /home/site1/>
Options -Includes -Indexes -FollowSymLinks +ExecCGI MultiViews
AddHandler cgi-script .cgi .pl
AllowOverride none
Order allow,deny
Allow from all
</Directory>
[...]

所以,我更喜欢在cgi-bin中使用Perl脚本,但是如果我无法解决这个问题,我可以将所有脚本移动到htdocs。

3 个答案:

答案 0 :(得分:16)

suEXEC有自己的docroot,它完全独立于您在Apache配置中配置的内容。您可以通过调用

来查看suEXEC的docroot是什么
suexec -V

你可能需要成为root用户。就我而言,docroot是/var/www。你必须把你的脚本放在那里。无法更改此重新保存重新编译suEXEC。不要尝试使用符号链接将脚本保持在/var/www之外(或者suEXEC配置的任何内容)。

编辑:正如@insaner在评论中提到的那样,该命令可能是suexec或者至少在一个服务器suexec2上看到过。 suEXEC正是Apache文档所称的模块/功能。

答案 1 :(得分:0)

如果您使用的是re软件包,则/etc/apache2/suexec/www-data中有一个配置,其中前两行位于下面。

apache2-suexec-custom

您需要用您的设置替换这些行。应该有2行。只给出一行会出错。

我使用了类似下面的内容,

/var/www
public_html/cgi-bin

答案 2 :(得分:-4)

将DocumentRoot /home/site1/htdocs更改为DocumentRoot /home/site1/