以下是当我点击任何服务/主机扩展信息时的屏幕截图:
顶部的怪异信息:
行的内容以__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式中的某个点与任何字符匹配,您需要编写\.
以匹配一个文字点)。 另外, Location
和LocationMatch
部分总是在最后一步应用,并覆盖其他所有内容( .htaccess
, Directory
, Files
), 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日志,告诉我们为什么拒绝玩球。 希望在修复之前,不要一直深入到这个部分,如果你这样做的话,我会非常好奇诊断显示的是什么。