我在跑步monitorix在 CentOS 上使用我的 apache 服务器(而不是内置服务器),并在虚拟主机中添加以下内容:
Alias /monitorix /usr/share/monitorix
<Directory /usr/share/monitorix>
Options -Indexes +FollowSymLinks
Order allow,deny
Allow from all
AllowOverride All
</Directory>
<Directory /usr/share/monitorix/cgi>
AddHandler cgi-script .cgi
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI +FollowSymLinks
Allow from all
AllowOverride All
</Directory>
此外,monitorix 本身的配置如下:
base_dir = /usr/share/monitorix/
base_lib = /usr/lib/monitorix/
base_url = /monitorix
base_cgi = /monitorix/cgi
当我打开 URL 时http://domain.com/monitorix,我得到了正确显示 Monitorix 版本 v3.4.0 的 HTML 界面。因此 httpd 配置似乎运行良好。
当我单击[确定]按钮时,出现此错误:
严重:Monitorix 无法继续!
未找到文件“monitorix.conf.path”。
请确保“base_dir”选项配置正确,并且此 CGI(monitorix.cgi)位于“base_dir”/cgi/ 目录中。
不要忘记重新启动 Monitorix 以使更改生效!
我的 http 日志文件显示:
[Fri Mar 28 10:26:01 2014] [error] FATAL: File 'monitorix.conf.path' was not found! at /usr/share/monitorix/cgi/monitorix.cgi line 210.\n
这说明 CGI 也运行正常。httpd 配置中的路径似乎也正常,并且与 monitorix 配置中的路径匹配似乎也正确。
但不知何故,路径不对。我尝试了带有和不带有尾部斜杠的 base_dir,但没有帮助。
文件 /usr/share/monitorix/cgi/monitorix.cgi 在第 210 行之前尝试
open(IN, "< monitorix.conf.path");
my $config_path = <IN>;
chomp($config_path);
close(IN);
文件 /usr/share/monitorix/cgi/monitorix.conf.path 也存在。
我不太了解 PERL,谁能告诉我这里出了什么问题?
答案1
这个 Perl CGImonitorix.cgi
根本找不到名为 的配置文件monitorix.conf.path
。
由于您仅显示 Perl 文件的一个片段,因此这只是猜测:
- 要么没有默认值
monitorix.conf.path
,你必须创建一个/usr/share/monitoryx/cgi/
- 或者 Perl CGI 正在 中查找它
/usr/share/monitoryx/
,而不是base_dir/cgi/
像您单击按钮时收到的错误消息中所解释的那样。
当然,这都是最好的猜测。Perl CGI 仍有可能在完全不同的地方寻找其配置文件。
答案2
我发现了问题:mod_perl 已启用并与 cgi 混淆以查找位于同一目录中的文件。
感谢#freenode.net #monitorix IRC 频道的 Mikaku 解决这个问题!