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

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

我在 Ubuntu 服务器 14.04 上全新安装的 Apache 2.4 上安装了 CGI 脚本。Apache 不断回复403 禁止对我来说,配置文件也是没问题的。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>

所有文件都至少/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
...

另外,我不明白为什么当我尝试从 URL 访问时/monitorix-cgi(我从指令中得到了这个想法ScriptAlias)我得到了200 还行我可以看到 Perl 源代码/var/lib/monitorix/www/cgi/monitorix.cgi

不久前,我在 Debian 上安装了这个工具,没有遇到任何问题,它/monitorix按预期工作,并/monitorix-cgi正确地给了我403 禁止而不是显示 Perl 源文件。

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

答案1

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

Alias /monitorix /var/lib/monitorix/www/cgi

或者添加额外的目录块:

<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>

至于查看 cgi 的源代码,可能是 mod_cgi 的配置问题。要么未启用,要么未设置为处理 *.cgi 文件。您可能需要添加:

AddHandler cgi-script .cgi

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

sudo a2enmod cgi

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

答案2

我认为你需要一个要求行:

Require all granted

答案3

以下配置对我有用(Apache 2.4):

<VirtualHost *:443>                                                                                                                                                                                        
        ServerName your.server.com                                                                                                                                                                      
        DocumentRoot "/var/lib/monitorix/www"                                                                                                                                                              

        AddHandler cgi-script .cgi                                                                                                                                                                         

        Alias /cgi /var/lib/monitorix/www/cgi                                                                                                                                                              

        <Directory "/var/lib/monitorix/www">                                                                                                                                                               
                Require all granted                                                                                                                                                                        
        </Directory>                                                                                                                                                                                       

        <Directory "/var/lib/monitorix/www/cgi">                                                                                                                                                           
                AllowOverride None                                                                                                                                                                         
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch                                                                                                                                         
                Require all granted                                                                                                                                                                        
        </Directory>                                                                                                                                                                                       
</VirtualHost> 

/etc/monitorix/monitorix.conf 如下所示:

    base_url = /                                                                                                                                                                                               
    base_cgi = /cgi

并禁用内置的 httpd 服务:

<httpd_builtin>                                                                                                                                                                                        
            enabled = n     

相关内容