关于Nagios Web UI的奇怪扩展信息

以下是当我点击任何服务/主机扩展信息时的屏幕截图:

顶部的怪异信息:

顶部是奇怪的信息

行的内容以__gmon_start_libc.so...开头:

 __gmon_start__libc.so.6fflushstrcpy__rawmemchrgmtime_rexitreaddirfopenstrrchr__strdupclosedirstrncpyputsputcharreallocstdinstrpbrklocaltime_rgmtimestrtokmmapfgetscallocstrlenmemsetstrstr__errno_locationstdoutmemcpyfcloserand__strtol_internalmallocstrcatstrcasecmpasprintfopendirgetenvsscanfsystemmunmapstrncasecmp__fxstatstrncatfreadlocaltimestrchrmktimeqsort__strtod_internal__ctype_toupper_loc__ctype_tolower_loc__xstatstrcmpstrerror__libc_start_mainsnprintf__strtoul_internalfreeGLIBC_2.3GLIBC_2.2.5 

和格式不好的菜单在底部:

底部格式不佳

点击任何服务命令,它会响应“400错误请求”错误。

Apache中的configuration:

 <VirtualHost *:80> ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin" ServerName xx ErrorLog logs/nagios.error_log <Directory "/usr/local/nagios/sbin"> Options ExecCGI AllowOverride None Order allow,deny Allow from all </Directory> Alias /nagios "/usr/local/nagios/share" <Directory "/usr/local/nagios/share"> Options None AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost> 

Apache的错误日志中没有任何与此相关的东西。

我已经更新到最新版本3.3.1:

 nagios -v Nagios Core 3.3.1 Copyright (c) 2009-2011 Nagios Core Development Team and Community Contributors Copyright (c) 1999-2009 Ethan Galstad Last Modified: 07-25-2011 License: GPL 

但仍然存在。

extinfo.cgi的extinfo.cgi

 -rwxrwxr-x 1 nagios nagios 285528 Sep 15 17:52 extinfo.cgi 

我应该先看一下debugging这个案子?


UPDATE

我已经将ScriptLog指令添加到了nagios虚拟主机:

 ScriptLog logs/cgi_log 

这个文件是手动创build和chmod

 -rw-r--r-- 1 apache apache 0 Sep 20 11:46 /var/log/httpd/cgi_log 

去浏览器复制这个错误,但日志是空的。 有没有人有另一个想法?


更新2

下面是以apache用户extinfo.cgi从命令行运行extinfo.cgi时的输出:

 # REQUEST_METHOD=GET QUERY_STRING="?type=2&host=149&service=Disk_Free" REMOTE_USER="quanta" ./extinfo.cgi 

更新3

您提到了其他正在工作的CGI,它们也被称为.cgi吗?

当然。 /usr/local/nagios/sbin/所有其余的.cgi脚本都可以正常工作。 例如status.cgi

所有主机的服务状态详细信息

您configurationScriptLog的方式应该是打印信息。

但事实并非如此。 这个日志文件是空白的。

 -rw-r--r-- 1 apache apache 0 Sep 20 11:46 /var/log/httpd/cgi_log 

看起来你已经closures了这个目录的AllowOverride,但是也许apacheconfiguration允许其他目录更高呢? 在这种情况下,请确保您没有禁用ExecCGI或在nginx sbin上方的任何目录中都有任何.htaccess文件。

/usr/local/nagios没有.htaccess文件。 我还将这个configuration与另一个正在工作的文件进行比较,没有显着差异:

 ScriptAlias /nagios/cgi-bin "/usr/lib64/nagios/cgi" <Directory "/usr/lib64/nagios/cgi"> Options ExecCGI AllowOverride None Order allow,deny Allow from all AuthName "Nagios Access" AuthType Basic AuthUserFile /etc/nagios/htpasswd.users Require valid-user </Directory> Alias /nagios "/usr/share/nagios" <Directory "/usr/share/nagios"> Options None AllowOverride None Order allow,deny Allow from all AuthName "Nagios Access" AuthType Basic AuthUserFile /etc/nagios/htpasswd.users Require valid-user </Directory> 

如果这不起作用,我会增加apache日志级别:

我做了,但在错误日志中没有任何与cgi相关的内容:

 proxy_util.c(1873): proxy: worker proxy:reverse already initialized proxy_util.c(1967): proxy: initialized single connection worker 0 in child 3586 for (*) proxy_util.c(1854): proxy: grabbed scoreboard slot 0 in child 3587 for worker proxy:revers proxy_util.c(1873): proxy: worker proxy:reverse already initialized proxy_util.c(1967): proxy: initialized single connection worker 0 in child 3587 for (*) 

如果没有一个指出这个问题,我可能将apache设置为只运行一个孩子,并看到一个工作的CGI的输出与一个非工作的CGI的输出,看看是什么问题。

好点子。 我在这里附上strace文件。

跟踪只打开文件:

 strace -e trace=open -o /tmp/*.strace /usr/sbin/httpd -X 
  • extinfo.cgi (没有工作): http : extinfo.cgi
  • status.cgi (作品): http : status.cgi

跟踪完整:

 strace -o /tmp/*.strace /usr/sbin/httpd -X 
  • extinfo.cgi : http : //www.mediafire.com/? extinfo.cgi
  • status.cgi : http : //www.mediafire.com/? status.cgi

看看是否可以帮忙。

如果你重命名extinfo.cgi ,它会运行在另一个名字? 如果脚本将在重命名后执行,那么很可能您的Apacheconfiguration的某些部分以某种非预期的方式处理extinfo.cgi名称。 例如,在/etc/httpd/conf.d/satisfy.conf有:

 <LocationMatch "/info(1|2).php"> 

本节将实际应用于包含URL中任何位置的匹配部分的所有请求(因为正则expression式模式未被锚定)。 例如,它将应用于/info1.php /dir/info1_php_anything/and/more (请注意,正则expression式中的某个点与任何字符匹配,您需要编写\.以匹配一个文字点)。 另外, LocationLocationMatch部分总是在最后一步应用,并覆盖其他所有内容( .htaccessDirectoryFiles ), VirtualHost定义之外的部分应用于所有虚拟主机。

如果您的configuration文件包含其他类似的马虎的LocationMatch模式,可能其中一些匹配/nagios/cgi-bin/extinfo.cgi并打破CGI处理只为这个特定的脚本名称。

ScriptAlias指令由mod_alias提供,但是用这个指令标记的目录中的文件是由mod_cgi处理的。

检查你的mod_cgi是否正确加载。

我非常有信心这是一个configuration问题,可能与AddHandler有关。 你提供的输出@Vladimir Blaskov也指出apache不认为这是一个cgi。 您提到了其他正在工作的CGI,它们也被称为.cgi吗? 或者他们只是在允许ExecCGI没有后缀的目录? 另外从文档:

http://httpd.apache.org/docs/current/mod/mod_cgi.html

http://httpd.apache.org/docs/2.0/howto/cgi.html#configuring

您configurationScriptLog的方式应该是打印信息。 如果我在你的情况下,我会检查一些事情:

确保你有一个有效的AddHandler:

http://httpd.apache.org/docs/current/mod/mod_mime.html#addhandler

对于.cgi,或者testing其他.cgi与extinfo.cgi在同一个目录下工作。

看起来你已经closures了这个目录的AllowOverride,但是也许apacheconfiguration允许其他目录更高呢? 在这种情况下,请确保您没有禁用ExecCGI或在nginx sbin上方的任何目录中都有任何.htaccess文件。

如果这不起作用,我会增加apache日志级别:

http://httpd.apache.org/docs/2.0/mod/core.html#loglevel

 LogLevel debug 

然后看看是否打印出与为什么该文件或目录没有被作为CGI处理的任何东西。

如果没有一个指出这个问题,我可能将apache设置为只运行一个孩子,并看到一个工作的CGI的输出与一个非工作的CGI的输出,看看是什么问题。 这种testing可能会暴露,如果有logging的configuration问题,以便Apache不能写出有用的消息到CGI日志,告诉我们为什么拒绝玩球。 希望在修复之前,不要一直深入到这个部分,如果你这样做的话,我会非常好奇诊断显示的是什么。