一.安裝nagios這里不做說明
1.nagios map顯示出不來,要裝GD 和GD-DEV*  然后再重新編譯nagios,要么就一開始就裝好。
二.nginx部分
1.安裝
2.配置部分,nginx不能執(zhí)行外部程序,所以我們要用fastcgi協(xié)議來調(diào)用外部程序。
Nginx并不提供支持對外部程序的直接調(diào)用或者解析(所以缺少像apache里的mod_php這樣的模塊),所有的外部程序(包括PHP)必須通過fastcgi接口來調(diào)用,在Linux下接口是socket (文件socket或者Internet socket)。所以為了調(diào)用CGI程序,我們需要一個fastcgi的wrapper,這個wrapper綁定在某個固定socket上(比如端口或者文件socket),當nginx將CGI請求發(fā)送給這個socket的時候,wrapper接納請求并fork一個新的線程,這個線程調(diào)用外部的程序或者解釋器處理腳本并讀取返回值,而wrapper再將返回的數(shù)據(jù)(網(wǎng)頁或者圖片等)通過fastcgi將數(shù)據(jù)通過那個固定的socket傳遞給nginx
目前有網(wǎng)上流行的兩種fastcgi管理器,perl-cgi和spwan-cgi,用spwan-cgi啟動php部分
例:spwan-cgi -a 127.0.0.1 -p  9000 -f /usr/local/php-cgi  -C 20
這里我們也可以用-s 參數(shù)來啟用sock通信,例:unix:/var/run/nginx.sock
命令用法可以用--help來查看,然后再nginx.conf寫入
location ~ \.php$ {
            root           /usr/local/nagios/share/;
           fastcgi_pass    127.0.0.1:9000;
          # fastcgi_pass unix:/var/run/nagios.sock;
           fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME /usr/local/nagios/share/$fastcgi_script_name;
           include        fastcgi_params;
        }
把所有php結(jié)尾的訪問交給php來處理。
下面是perl-cgi的內(nèi)容,它也是根據(jù)fastcgi協(xié)議寫的
#!/usr/bin/perl
use FCGI;
#perl -MCPAN -e 'install FCGI'
use Socket;
#this keeps the program alive or something after exec'ing perl scripts
END() { } BEGIN() { }
*CORE::GLOBAL::exit = sub { die "fakeexit\nrc=".shift()."\n"; }; eval q{exit}; if ($@) { exit unless $@ =~ /^fakeexit/; } ;
&main;
sub main {
                #$socket = FCGI::OpenSocket( ":3461", 10 ); #use IP sockets
                $socket = FCGI::OpenSocket( "/var/run/nagios.sock", 10 ); #use UNIX sockets - user running this script must have w access to the 'nginx' folder!!
                $request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket );
                if ($request) {request_loop()};
                        FCGI::CloseSocket( $socket );
}
sub request_loop {
                while( $request->Accept() >= 0 ) {
                   #processing any STDIN input from WebServer (for CGI-GET actions)
                   $env = $request->GetEnvironment();
                   $stdin_passthrough ='';
                   $req_len = 0 + $ENV{CONTENT_LENGTH};
                   if ($ENV{REQUEST_METHOD} eq 'GET'){
                                $stdin_passthrough .= $ENV{'QUERY_STRING'};
                        }
                        #running the cgi app
                        if ( (-x $ENV{SCRIPT_FILENAME}) && #can I execute this?
                                 (-s $ENV{SCRIPT_FILENAME}) && #Is this file empty?
                                 (-r $ENV{SCRIPT_FILENAME})     #can I read this file?
                        ){
                                #http://perldoc.perl.org/perlipc.html#Safe-Pipe-Opens
                open $cgi_app, '-|', $ENV{SCRIPT_FILENAME}, $stdin_passthrough or print("Content-type: text/plain\r\n\r\n"); print "Error: CGI app returned no output - Executing $ENV{SCRIPT_FILENAME} failed !\n";
                                if ($cgi_app) {print <$cgi_app>; close $cgi_app;}
                        }
                        else {
                                print("Content-type: text/plain\r\n\r\n");
                                print "Error: No such CGI app - $req_len - $ENV{CONTENT_LENGTH} - $ENV{REQUEST_METHOD} - $ENV{SCRIPT_FILENAME} may not exist or is not executable by this process.\n";
                        }
                }
}
用一個腳本啟動
#!/bin/bash
## start_nginx_cgi.sh: start nginx cgi mode
## ljzhou, 2007.08.20
PERL="/usr/bin/perl"
NGINX_CGI_FILE="/usr/local/nagios/bin/perl-cgi.pl"
#bg_num=`jobs -l |grep "NGINX_CGI_FILE"`
#PID=`ps aux|grep "perl-cgi"|cut -c10-14|xargs kill -9`
PID=`ps aux|grep 'perl-cgi'|cut -c10-14|sed -n "1P"`
echo $PID
sockfiles="/var/run/nagios.sock"
kill -9 $PID
$PERL $NGINX_CGI_FILE &
sleep 3
`chown nobody.nobody $sockfiles`
 然后再加如下配置到nginx
location ~ \.cgi$ {
     rewrite ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;
     fastcgi_pass unix:/var/run/nagios.sock;
     fastcgi_index index.cgi;
     fastcgi_param SCRIPT_FILENAME /usr/local/nagios/sbin$fastcgi_script_name;
     fastcgi_param HTTP_ACCEPT_LANGUAGE en_US;
     include fastcgi_params;
  }
     location ~ \.pl$ {
     fastcgi_pass  unix:/var/run/nagios.sock;
     fastcgi_index index.pl;
     fastcgi_param SCRIPT_FILENAME  /usr/local/nagios/sbin$fastcgi_script_name;
     include       fastcgi_params;
  }
到處為止OK