Ниже приведены снимки экрана, когда я нажимаю на любую расширенную информацию о службе / хосте:
Странная информация вверху:
Содержание строки начинается с __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
На что мне следует обратить внимание в первую очередь, чтобы отладить этот случай?
ОБНОВИТЬ
Я добавил ScriptLog
директива для виртуального хоста nagios:
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 или у вас есть файлы .htaccess в любом каталоге выше sbin nginx.
Здесь нет .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 -e trace=open -o /tmp/*.strace /usr/sbin/httpd -X
extinfo.cgi
(не сработало): http://pastebin.com/PKggyzfKstatus.cgi
(работает): http://pastebin.com/Gg6WwntJТрассировка полная:
strace -o /tmp/*.strace /usr/sbin/httpd -X
extinfo.cgi
: http://www.mediafire.com/?c0du4p55pn7oh76status.cgi
: http://www.mediafire.com/?1atvyecswmbv0syПосмотрите, сможете ли вы помочь.
Если вы переименуете 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
(обратите внимание, что точка в регулярном выражении соответствует любому символу, вам нужно написать \.
чтобы соответствовать буквальной точке). Также, Location
и LocationMatch
разделы всегда применяются на последнем шаге и отменяют все остальное (.htaccess
, Directory
, Files
) и разделы вне VirtualHost
определение применяется ко всем виртуальным хостам.
Если ваши файлы конфигурации содержат другие похожие небрежные LocationMatch
шаблоны, возможно, некоторые из них совпадают /nagios/cgi-bin/extinfo.cgi
и прервать обработку CGI только для этого конкретного имени скрипта.
В ScriptAlias директива предоставляется mod_alias, но файлы в каталогах, отмеченных этой директивой, обрабатываются mod_cgi.
Проверьте, если ваш mod_cgi правильно загружен.
Я почти уверен, что это проблема конфигурации, вероятно, связанная с 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 или у вас есть файлы .htaccess в любом каталоге выше sbin nginx.
Если это не сработает, я бы увеличил уровень журнала apache:
http://httpd.apache.org/docs/2.0/mod/core.html#loglevel
LogLevel debug
затем посмотрите, печатает ли это что-нибудь, связанное с тем, почему этот файл или каталог не обрабатывается как CGI.
Если ничто из этого не указывает на проблему, я бы, вероятно, столкнулся с apache после того, как настроил его на запуск только одного дочернего элемента и просмотр выходных данных рабочего CGI по сравнению с неработающим CGI, чтобы увидеть, в чем проблема. Этот вид теста может выявить, если, возможно, есть проблема конфигурации с журналированием, так что apache не может записывать полезные сообщения в журнал CGI, рассказывающие нам, почему он отказывается играть в мяч. Надеюсь, вы не дойдете до этой части, прежде чем исправите ее, если вы это сделаете, мне будет действительно любопытно, что показала диагностика.