Apache 2.4 对 CGI 脚本回复“403 Forbidden”,我的配置看起来没问题

lor*_*o-s 0 perl cgi mod-auth apache-2.4

我在 Ubuntu 服务器 14.04 上全新安装的 Apache 2.4 上安装了 CGI 脚本。如果对我来说配置文件没问题,Apache也会继续回复403 Forbidden。CGI 是 Monitorix 前端,一个用 Perl 编写的系统监控工具。

配置文件/etc/apache2/conf-enabled/monitorix.conf是:

Alias /monitorix /var/lib/monitorix/www
ScriptAlias /monitorix-cgi /var/lib/monitorix/www/cgi

<Directory /var/lib/monitorix/www/cgi/>
        DirectoryIndex monitorix.cgi
        Options ExecCGI
        <IfModule mod_authz_core.c>
                # Apache 2.4
                Require all granted
        </IfModule>
        <IfModule !mod_authz_core.c>
                # Apache 2.2
                Order deny,allow
                Allow from all
        </IfModule>
</Directory>
Run Code Online (Sandbox Code Playgroud)

在所有文件/var/lib/monitorix/www/var/lib/monitorix/www/cgi对所有至少读取权限。每次我尝试从 URL 访问时/monitorix,在我的 Apache 日志中我都会看到以下几行:

[Mon Sep 01 06:57:52.995680 2014] [authz_core:error] [pid 17145] [client x.x.x.x:58879] AH01630: client denied by server configuration: /var/lib/monitorix/www
[Mon Sep 01 07:00:10.131166 2014] [authz_core:error] [pid 17145] [client x.x.x.x:58903] AH01630: client denied by server configuration: /var/lib/monitorix/www
[Mon Sep 01 07:00:11.102614 2014] [authz_core:error] [pid 17145] [client x.x.x.x:58903] AH01630: client denied by server configuration: /var/lib/monitorix/www
...
Run Code Online (Sandbox Code Playgroud)

另外,我不知道为什么,当我尝试从URL访问/monitorix-cgi(我从这个想法ScriptAlias指令),我得到200 OK我能看到的Perl源/var/lib/monitorix/www/cgi/monitorix.cgi

前一段时间我在 Debian 上安装了这个工具,我没有问题,/monitorix按预期工作,/monitorix-cgi正确地给了我403 Forbidden而不是显示 Perl 源文件。

更新:此问题已报告给 Monitorix 并可能已修复(#69)

Jef*_*der 5

当您在浏览器中访问 /monitorix 时,您正在访问 /var/lib/monitorix/www。您的目录块允许访问 /var/lib/monitorix/www/ cgi,而不是 /var/lib/monitorix/www。将别名更改为:

Alias /monitorix /var/lib/monitorix/www/cgi
Run Code Online (Sandbox Code Playgroud)

或添加一个额外的目录块:

<Directory /var/lib/monitorix/www/>
    <IfModule mod_authz_core.c>
            # Apache 2.4
            Require all granted
    </IfModule>
    <IfModule !mod_authz_core.c>
            # Apache 2.2
            Order deny,allow
            Allow from all
    </IfModule>
</Directory>
Run Code Online (Sandbox Code Playgroud)

至于看cgi的来源,大概是mod_cgi的配置。它要么未启用,要么未设置为处理 *.cgi 文件。您可能需要添加:

AddHandler cgi-script .cgi
Run Code Online (Sandbox Code Playgroud)

到您的虚拟主机或目录块。如果这不起作用,请在您的 shell 中尝试此操作:

sudo a2enmod cgi
Run Code Online (Sandbox Code Playgroud)

并按照说明重新加载apache。如果它仍然不起作用,请在下面添加评论并可能更新您的问题。我再看看,也许会建立一个测试系统。