我在Ubuntu服务器14.04上安装了Apache 2.4的全新安装CGI脚本。 Apache不断回答403 Forbidden,如果对我来说,configuration文件是好的。 CGI是Monitorix的前端,一个用Perl编写的系统监视工具。
configuration文件/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所有文件至less都具有读取权限。 每次我尝试从URL /monitorix访问,在我的Apache日志中,我看到行:
[Mon Sep 01 06:57:52.995680 2014] [authz_core:error] [pid 17145] [client xxxx: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 xxxx: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 xxxx:58903] AH01630: client denied by server configuration: /var/lib/monitorix/www ...
另外,我不明白为什么,当我尝试从URL /monitorix-cgi (我从ScriptAlias指令中得到的想法)访问时,我得到200 OK , 我可以看到 /var/lib/monitorix/www/cgi/monitorix.cgi 的Perl源代码 /var/lib/monitorix/www/cgi/monitorix.cgi 。
以前我在Debian上安装了这个工具,我没有问题, /monitorix按预期工作, /monitorix-cgi正确地给了我403 Forbidden,而不是显示Perl源文件。
更新 :这个问题已经报告给Monitorix,可能是固定的(#69)
当您在浏览器中访问/ monitorix时,您正在访问/ var / lib / monitorix / www。 您的目录块允许访问/ var / lib / monitorix / www / cgi ,而不是/ 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的configuration。 要么它没有启用,或者没有设置处理* .cgi文件。 您可能需要添加:
AddHandler cgi-script .cgi
到您的虚拟主机或目录块。 如果这不起作用,请在你的shell中试试这个:
sudo a2enmod cgi
并按照说明重新加载Apache。 如果仍然不起作用,请在下面添加注释,并可能更新您的问题。 我会再看看,也许build立一个testing系统。
我认为你需要一个需求线:
Require all granted
下面的configuration为我工作(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