标签归档:nginx

nginx的perl的fcgi环境搭建。


首先:有三种方式(三个不同的脚本)搭建cgi环境,第二种,在运行时,nginx的error里会报错。
FastCGI sent in stderr: “Bad file descriptor at /EBS/fcgi.pl line 125”,第二种脚本的好处是可以起多个进程(process)
 方法一
 测试页
 
 

记得一定要给nginx发送头信息 不然会报504错误的。

#!/usr/bin/perl -w
print “Content-type: text/plain\r\n\r\n”;#发送头信息
print “test”;

1、安装FCGI模块:
到http://search.cpan.org/网站上下载FCGI模块:

wget http://search.cpan.org/CPAN/authors/id/S/SK/SKIMO/FCGI-0.67.tar.gz
 
tar -zxvf FCGI-0.67.tar.gz. 
cd FCGI-0.67 
perl Makefile.PL
make 
make install

2、安装 IO 和 IO::ALL模块
下载:
wget http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/IO-1.25.tar.gz
http://search.cpan.org/CPAN/authors/id/I/IN/INGY/IO-All-0.39.tar.gz
安装:
tar -xvzf IO-1.25.tar.gz
cd IO-1.25
perl Makefile.PL
make 
make install
 
tar -xvzf IO-All-0.39.tar.gz
cd IO-ALL-0.39
perl Makefile.PL
make
make install
  
3、如果需要,安装perl-Getopt和 perl-Socket
(转注:以上三项,使用cpan安装会跟简单一些,cpan怎么安装,请看其它日志) 
  
4、perl cgi脚本
或从下面的地址下载perl-fcgi脚本
http://www.nginx.eu/nginx-fcgi/nginx-fcgi.txt
(转注:拿到这个脚本后,可能需要修改一些脚本的路径,在我的操作过程中,我更改了一下sock那个文件的名字,这个文件我是放在/usr/local/nginx/perl-fcgi.pl,我没有取nginx-fcgi.pl这个名字)

5、启动cgi脚本 (nobody为nginx的运行用户)
vi start_perl_cgi.sh
  

#!/bin/bash

#set -x

dir=/usr/local/nginx

 

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/null

 

chown nobody.root $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_f

cgi.sh

 

chown nobody.nobody $dir/now_start_perl_fcgi.sh

chmod u+x $dir/now_start_perl_fcgi.sh

 

sudo -u nobody $dir/now_start_perl_fcgi.sh

echo “start perl-fcgi done”

}

 

case $1 in

stop)

stop

;;

start)

start

;;

restart)

stop

start

;;

esac 

启动
./start_perl_cgi.sh start

6为Nginx添加FCGI支持(以安装nagios为例)
vi perl_fcgi.conf 

gzip off; #gzip makes scripts feel slower since they have to complete before getting gzipped
fastcgi_pass unix:/usr/local/nginx/logs/nginx-fcgi.sock;
fastcgi_index index.cgi;

fastcgi_param SCRIPT_FILENAME /usr/local/nagios/sbin$fastcgi_script_name;

fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name

以上为perl_fcgi.conf文件内容(转注)

location ~* .*\.cgi$
                {
                      rewrite ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;
                        include perl_fcgi.conf;
                }

以上为nginx.conf配置文件中的内容(转注)
将请求cgi的url由/nagios/cgi-bin/*.cgi 重写为/*.cgi,这样,即下面的fastcgi_param中的$fastcgi_script_name,这样,可以正确的拼出cgi文件的路径。

重启nginx后,应该就可以访问perl的cgi文件了 

配置nginx下的perl的fcgi的原因是我需要在我的机器上安装nagios。
以上为摘抄加自己的一些补充,原作地址为:http://blog.chinaunix.net/u/32831/showart_2011754.html

  

解决Nginx + PHP(FastCGI)遇到的502 Bad Gateway错误

解决Nginx + PHP(FastCGI)遇到的502 Bad Gateway错误

昨日,有朋友问我,他将Web服务器换成Nginx 0.6.31  + PHP 4.4.7(FastCGI)后,有时候访问会出现“502 Bad Gateway”错误,如何解决。

  我让按照以下两个步骤去解决,最后在第2步中将FastCGI的timeout时间增加为300,问题解决:

  PS:比较羡慕迅雷的Web服务器,16G内存。


  1、查看当前的PHP FastCGI进程数是否够用:

netstat -anpo | grep “php-cgi” | wc -l

  如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。


  2、部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,例如:

……
http
{
……
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
……
}
……