\
ios
<span style="background-color: rgb(255, 255, 255); font-family: Tahoma, " microsoft="" yahei',="" simsun;="" font-size:="" 14px;="" line-height:="" 21px;="" color:="" rgb(68,="" 68,="" 68);="" "="">下面是nginx的错误日志:
<span style="background-color: rgb(255, 255, 255); font-family: Tahoma, " microsoft="" yahei',="" simsun;="" font-size:="" 14px;="" line-height:="" 21px;="" color:="" rgb(68,="" 68,="" 68);="" "="">2012/06/27 15:15:18 [error] 28672#0: *2288 upstream closed prematurely FastCGI stdout while reading response header from upstream, client: 10.10.10.120, server: localhost, request: "POST /nagios/cgi-bin/cmd.cgi HTTP/1.1", upstream: "fastcgi://unix:/usr/local/nginx/logs/perl-fcgi.sock:", host: "10.10.10.201", referrer: "http://10.10.10.201/nagios/cgi-bin/cmd.cgi?cmd_typ=22&host=WEB1&service=HTTP"nginx
解决方案:web
nagios依赖 PHP 环境 和per 环境;
nginx不支持perl的CGI;
须要先 搭建perl环境,让nginx支持perl的CGI方法不少,基本原理都是经过perl的FCGI模块来实现,使用其中一种方法实现:
A. 安装FCGI模块
wget http://search.cpan.org/CPAN/auth ... RA/FCGI-0.73.tar.gz
tar xvzf FCGI-0.73.tar.gz
cd FCGI-0.73
perl Makefile.PL
make
make install
cd ..bash
B. 安装FCGI-ProcManager模块
wget http://search.cpan.org/CPAN/auth ... Manager-0.19.tar.gz
tar xvzf FCGI-ProcManager-0.19.tar.gz
cd FCGI-ProcManager-0.19
perl Makefile.PL
make
make install
cd ..ide
C. 安装IO和IO::ALL模块
wget http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/IO-1.25.tar.gz
tar zxvf IO-1.25.tar.gz
cd IO-1.25
perl Makefile.PL
make
make install
cd ..spa
wget http://search.cpan.org/CPAN/auth ... /IO-All-0.41.tar.gz
tar zxvf IO-All-0.41.tar.gz
cd IO-All-0.41
perl Makefile.PL
make
make install
cd ..
D. 下载Perl脚本
这个脚本的目的就是产生一个PERL的FastCGI接口,让Nginx能够以CGI方式处理Perl。
wget http://www.mike.org.cn/wp-content/uploads/2011/07/perl-fcgi.zip
unzip perl-fcgi.zip
cp perl-fcgi.pl /usr/local/webserver/nginx/
注:建议把这个脚本放在Nginx安装目录。
修改脚本权限
chmod 755 /usr/local/webserver/nginx/perl-fcgi.pl
E. 创建一个CGI启动/中止脚本
这个SHELL脚本只是为了方便管理上面的Perl脚本。脚本中的www为nginx的运行用户,请据本身的实际状况调整。
注意事项:不能用root用户执行(会提示). 要用与Nginx相同身份的用户执行。不然可能会在Nginx Log中提示 Permision Denied。
vi /usr/local/webserver/nginx/start_perl_cgi.shunix
#!/bin/bash
#set -x
dir=/usr/local/webserver/nginx/rest
stop ()
{
#pkill -f $dir/perl-fcgi.pl
kill $(cat $dir/logs/perl-fcgi.pid)
rm $dir/logs/perl-fcgi.pid 2>/dev/null
rm $dir/logs/perl-fcgi.sock 2>/dev/null
echo "stop perl-fcgi done"
}日志
start ()
{
rm $dir/now_start_perl_fcgi.sh 2>/dev/nullserver
chown www.www $dir/logs
echo "$dir/perl-fcgi.pl -l $dir/logs/perl-fcgi.log -pid $dir/logs/perl-fcgi.pid -S $dir/logs/perl-fcgi.sock" >>$dir/now_start_perl_fcgi.sh
chown www.www $dir/now_start_perl_fcgi.sh
chmod u+x $dir/now_start_perl_fcgi.sh
sudo -u www $dir/now_start_perl_fcgi.sh
echo "start perl-fcgi done"
}
case $1 in
stop)
stop
;;
start)
start
;;
restart)
stop
start
;;
esac
修改SHELL脚本权限chmod 755 /usr/local/webserver/nginx/start_perl_cgi.sh启动脚本/usr/local/webserver/nginx/start_perl_cgi.sh start 正常状况下在/usr/local/webserver/nginx/logs下生成perl-fcgi.sock这个文件,若是没有生成,请检查下上面的步聚