Nagios Web UI 上奇怪的扩展信息

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中的配置:

<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

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

为了调试这个案例我应该首先看什么?


更新

我已向ScriptLognagios 虚拟主机添加了指令:

ScriptLog logs/cgi_log

该文件已创建并chmod手动:

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

转到浏览器复制此错误,但日志为空。有人有其他想法吗?


更新2

这里extinfo.cgi是以用户身份从命令行运行时的输出apache

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

更新 3

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

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

所有主机的服务状态详情

您配置 ScriptLog 的方式应该是打印信息。

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

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

看起来您已为此目录关闭了 AllowOverride,但也许 apache 配置允许将其用于其他更高级别的目录?在这种情况下,请确保您没有禁用 ExecCGI 或在 nginx sbin 上方的任何目录中没有任何 .htaccess 文件。

中没有.htaccess文件/usr/local/nagios。我还将此配置与另一个可以运行的文件进行了比较,没有明显差异:

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 文件。

仅跟踪打开的文件:

strace -e trace=open -o /tmp/*.strace /usr/sbin/httpd -X

跟踪已满:

strace -o /tmp/*.strace /usr/sbin/httpd -X

看看你是否能帮忙。

答案1

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

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

此部分实际上将应用于所有包含匹配部分的请求任何地方在 URL 中(因为正则表达式模式未固定)。例如,它将适用于/info1.php/some/dir/info2.php/dir/info1_php_anything/and/more(请注意,正则表达式中的点可匹配任何字符,您需要写入\.以匹配文字点)。此外,LocationLocationMatch部分始终在最后一步应用并覆盖其他所有内容(.htaccessDirectoryFiles),并且VirtualHost定义之外的部分将应用于所有虚拟主机。

如果您的配置文件包含其他类似的混乱LocationMatch模式,也许其中一些会匹配/nagios/cgi-bin/extinfo.cgi并破坏针对该特定脚本名称的 CGI 处理。

答案2

脚本别名指令由mod_alias,但标有该指令的目录中的文件将由mod_cgi

检查您的mod_cgi已正确加载。

答案3

我非常确信这是一个配置问题,可能与 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

您配置 ScriptLog 的方式应该是打印信息。如果我处于您的情况,我会检查以下几点:

确保您有一个有效的 AddHandler:

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

对于 .cgi,或者测试其他 .cgi 是否在与 extinfo.cgi 相同的目录中运行。

看起来您已为此目录关闭了 AllowOverride,但也许 apache 配置允许将其用于其他更高级别的目录?在这种情况下,请确保您没有禁用 ExecCGI 或在 nginx sbin 上方的任何目录中没有任何 .htaccess 文件。

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

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

LogLevel debug

然后查看是否打印任何与该文件或目录未作为 CGI 处理的原因相关的内容。

如果以上方法都不能指出问题所在,我可能会将 apache 设置为仅运行一个子进程,然后查看工作 CGI 与非工作 CGI 的输出,以查看问题所在。这种测试可能会暴露日志记录是否存在配置问题,导致 apache 无法向 CGI 日志中写入有用的消息,告诉我们它拒绝运行的原因。希望您在修复之前不要一直到这一部分,如果您这样做了,我会非常好奇诊断结果显示了什么。

相关内容