安装环境:CentOS5.5
1、下载相关软件
FCGI-0.67.tar.gz
FCGI-ProcManager-0.18.tar.gz
IO-All-0.39.tar.gznagios-3.2.3.tar.gznagios-plugins-1.4.15.tar.gz
2、建立相关用户
useradd nagios
groupadd nagcmd
usermod -g nagcmd nagios
usermod -g nagcmd www
3、安装Nagios
tar zxvf nagios-3.2.3.tar.gz
cd nagios-3.2.3
./configure --with-group=nagios --with-user=nagios --with-command-group=nagcmd --with-gd-lib=/usr/lib --with-gd-inc=/usr/include
make all
make install
make install-init
make install-config
make install-commandmode
4、安装Nagios插件
tar zxvf nagios-plugins-1.4.15.tar.gz
cd nagios-plugins-1.4.15
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install
5、配置Nagios启动
nagios chkconfig --add nagios
chkconfig nagios on
service nagios start
6、安装Perl fcgi模块,让Nginx支持CGI
tar -zxf FCGI-0.67.tar.gz
cd FCGI-0.67
perl Makefile.PL
make && make install
tar -zxf FCGI-ProcManager-0.18.tar.gz
cd FCGI-ProcManager-0.18
perl Makefile.PL
make && make install
tar zxf IO-All-0.39.tar.gz
cd IO-All-0.39
perl Makefile.PL
make && make install
建立nginx-fcgi脚本
vi /usr/local/nginx/sbin/nginx-fcgi
把下面内容写进脚本,并授执行权限#!/usr/bin/perl
#
#authorDanielDominikRudnicki
#thanksto:PiotrRomanczuk
#emaildaniel@
#version0.4.3
#webpagehttp://www.nginx.eu/
#
#BASED@/NginxSimpleCGI
#
#
#usestrict;
useFCGI;
useGetopt::Long;
useIO::All;
useSocket;
subinit{
GetOptions("h"=>\$help,
"verbose!"=>\$verbose,
"pid=s"=>\$filepid,
"l=s"=>\$logfile,
"S:s"=>\$unixsocket,
"P:i"=>\$unixport)orusage();
usage()if$help;
print"StartingNginx-fcgi\n"if$verbose;
print"Runningwith$>UID"if$verbose;
print"Perl$]"if$verbose;
#if($>=="0"){
#print"\n\tERROR\tRunningasaroot!\n";
#print"\tSuggestednottodoso!!!\n\n";
#exit1;
#}
if(!$logfile){
print"\n\tERROR\tlogfilemustdeclared\n"
."\tuse$0withoption-lfilename\n\n";
exit1;
}
print"Usinglogfile$logfile\n"if$verbose;
"\n\n">>io($logfile);
addlog($logfile,"StartingNginx-cfgi");
addlog($logfile,"Runningwith$>UID");
addlog($logfile,"Perl$]");
addlog($logfile,"Testingsocketoptions");
if(($unixsocket&&$unixport)||(!($unixsocket)&&!($unixport))){
print"\n\tERROR\tOnlyoneoptioncanbeused!\n";
print"\tSuggested(beacuseofspeed)isusageUNIXsocket-S\n\n";
exit1;
}
if($unixsocket){
print"DaemonlisteningatUNIXsocket$unixsocket\n"if$versbose;
addlog($logfile,"DeamonlisteningatUNIXsocket$unixsocket");
}else{
print"DaemonlisteningatTCP/IPsocket*:$unixport\n"if$verbose;
#
addlog($logfile,"DaemonlisteningatTCP/IPsocket*:$unixport");
}
if(-e$filepid){
print"\n\tERROR\tPIDfile$filepidalreadyexists\n\n";
addlog($logfile,"CannotusePIDfile$filepid,alreadyexists.");
exit1;
}
if($unixsocket){
print"CreatingUNIXsocket\n"if$verbose;
$socket=FCGI::OpenSocket($unixsocket,10);
if(!$socket){
print"Couldn'tcreatesocket\n";
addlog($logfile,"Couldn'tcreatesocket");
exit1;
}
print"UsingUNIXsocket$unixsocket\n"if$verbose;
}else{
print"CreatingTCP/IPsocket\n"if$verbose;
$portnumber=":".$unixport;
$socket=FCGI::OpenSocket($unixport,10);
if(!$socket){
print"Couldn'tcreatesocket\n";
addlog($logfile,"Couldn'tcreatesocket");
exit1;
}
print"Usingport$unixport\n"if$verbose;
}
addlog($logfile,"Socketcreated");
if(!$filepid){
print"\n\tERROR\tPIDfilemustdeclared\n"
."\tuse$0withoption-pidfilename\n\n";
exit1;
}
print"UsingPIDfile$filepid\n"if$verbose;
addlog($logfile,"UsingPIDfile$filepid");
my$pidnumber=$$;
$pidnumber>io($filepid);
print"PIDnumber$$\n"if$verbose;
addlog($logfile,"PIDnumber$pidnumber");
}
subaddzero{
my($date)=shift;
if($date<10){
return"0$date";
}
return$date;
}
sublogformat{
my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$iddst)=localtime(time);
my$datestring;
$year+=1900;
$mon++;
$mon=addzero($mon);
$mday=addzero($mday);
$min=addzero($min);
$datestring="$year-$mon-$mday$hour:$min";
return($datestring);
}
subaddlog{
my($log_file,$log_message)=@_;
my$curr_time=logformat();
my$write_message="[$curr_time]$log_message";
$write_message>>io($log_file);
"\n">>io($log_file);
}
subprinterror{
my$message=@_;
print"\nNginxFastCGI\tERROR\n"
."\t$message\n\n";
exit1;
}
subusage{
print"\nNginxFastCGI\n"
."\n\tusage:$0[-h]-Sstring-Pint\n"
."\n\t-h\t\t:this(help)message"
."\n\t-Spath\t\t:pathforUNIXsocket"
."\n\t-Pport\t\t:portnumber"
."\n\t-pfile\t\t:pathforpidfile"
."\n\t-lfile\t\t:pathforlogfile"
."\n\n\texample:$0-S/var/run/nginx-perl_cgi.sock-l/var/log/nginx/nginx-cfgi.log-pid/var/run/nginx-fcgi.pid\n\n";
exit1;
}
init;
#
END(){}BEGIN(){}
*CORE::GLOBAL::exit=sub{die"fakeexit\nrc=".shift()."\n";};evalq{exit};
if($@){
exitunless$@=~/^fakeexit/;
};
#forkpart
my$pid=fork();
if($pid==0){
&main;
exit0;
}
print"ForkingworkerprocesswithPID$pid\n"if$verbose;
addlog($logfile,"ForkingworkerprocesswithPID$pid");
print"UpdatePIDfile$filepid\n"if$verbose;
addlog($logfile,"UpdatePIDfile$filepid");
$pid>io($filepid);
print"Workerprocessrunning.\n"if$verbose;
addlog($logfile,"Parentprocess$$isexiting");
exit0;
submain{
$request=FCGI::Request(\*STDIN,\*STDOUT,\*STDERR,\%req_params,$socket);
if($request){request_loop()};
FCGI::CloseSocket($socket);
}
subrequest_loop{
while($request->Accept()>=0){
#processinganySTDINinputfromWebServer(forCGI-POSTactions)
$stdin_passthrough='';
$req_len=0+$req_params{'CONTENT_LENGTH'};
if(($req_params{'REQUEST_METHOD'}eq'POST')&&($req_len!=0)){
while($req_len){
$stdin_passthrough.=getc(STDIN);
$req_len--;
}
}
#runningthecgiapp
if((-x$req_params{SCRIPT_FILENAME})&&
(-s$req_params{SCRIPT_FILENAME})&&
(-r$req_params{SCRIPT_FILENAME})
){
foreach$key(keys%req_params){
$ENV{$key}=$req_params{$key};
}
if($verbose){
addlog($logfile,"running$req_params{SCRIPT_FILENAME}");
}
#/perlipc.html#Safe-Pipe-Opens
#
open$cgi_app,'-|',$req_params{SCRIPT_FILENAME},$stdin_passthroughorprint("Content-type:text/plain\r\n\r\n");print"Error:CGIappreturnednooutput-Executing$req_params{SCRIPT_FILENAME}failed!\n";#addlog($logfile,"Error:CGIappreturnednooutput-Executing$req_params{SCRIPT_FILENAME}failed!");
if($cgi_app){
print;
close$cgi_app;
}
}else{
print("Content-type:text/plain\r\n\r\n");
print"Error:NosuchCGIapp-$req_params{SCRIPT_FILENAME}maynotexistorisnotexecutablebythisprocess.\n";
addlog($logfile,"Error:NosuchCGIapp-$req_params{SCRIPT_FILENAME}maynotexistorisnotexecutablebythisprocess.");
}
}
}
chmod +x /usr/local/nginx/sbin/nginx-fcgi
运行脚本:
/usr/local/nginx/sbin/nginx-fcgi -l /usr/local/nginx/logs/nginx-fcgi.log -pid /usr/local/nginx/logs/nginx-fcgi.pid -S /usr/local/nginx/logs/nginx-fcgi.sock
把sock授权777:
chmod 777/usr/local/nginx/logs/nginx-fcgi.sock