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