nginx 开启fastcgi 可支持php、python、perl等多种语言

需要用到以下  perl 库:(以下版本可能过旧导致下载地址失效可直到上一级目录下载最新文件)

perl-FCGI
perl-Getopt
perl-IO
perl-Socket

安装 perl-FCGI 、perl-FCGI-ProcManager 和 perl-IO-ALL:

wget http://www.cpan.org/modules/by-module/FCGI/FCGI-0.67.tar.gz
tar -zxf FCGI-0.67.tar.gz
cd FCGI-0.67
perl Makefile.PL
make && make install
cd ..

wget http://search.cpan.org/CPAN/authors/id/G/GB/GBJK/FCGI-ProcManager-0.18.tar.gz
tar -zxf FCGI-ProcManager-0.18.tar.gz
cd FCGI-ProcManager-0.18
perl Makefile.PL
make && make install
cd ..

wget http://search.cpan.org/CPAN/authors/id/I/IN/INGY/IO-All-0.39.tar.gz
tar zxf IO-All-0.39.tar.gz
cd IO-All-0.39
perl Makefile.PL
make && make install

安装 nginx-fcgi 脚本:

wget http://hily.me/blog/wp-content/uploads/2010/01/nginx-fcgi.txt

mv nginx-fcgi.txt /usr/sbin/nginx-fcgi

chmod +x /usr/sbin/nginx-fcgi

如果不用 sudo 方式运行 nginx-fcgi,请注释掉 nginx-fcgi 脚本中的:

if ( $> == “0″ ) {
print “ ERROR Running as a root! ”;
print “ Suggested not to do so !!! ”;
exit 1;
}

启动 nginx-fcgi:

nginx-fcgi -l /var/log/nginx/nginx-fcgi.log -pid /var/run/nginx-fcgi.pid -S /var/run/nginx-fcgi.sock
chown www:www /var/run/nginx-fcgi.sock

注意一定要为 socket 添加 nginx 帐户的权限,否则 cgi 会执行失败。

新建 nginx-fcgi 脚本指令配置,直接从 fastcgi_params 复制模板:

cp /usr/local/nginx/conf/fastcgi_params /usr/local/nginx/conf/nginx_fcgi_params

去除尾部的:

# PHP only, required if PHP was built with –enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

新建示例 cgi 站点配置:

server {
listen       80;
server_name  test.local;

location ~ ^/cgi-bin/.*.cgi$
{
fastcgi_index  index.cgi;
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
include        nginx_fcgi_params;
fastcgi_read_timeout    5m;
fastcgi_pass   unix:/var/run/nginx-fcgi.sock;
}
}

重启 nginx,并添加开机启动

编辑/etc/init.d/perl-fastcgi

#!/bin/sh
#add for chkconfig
#chkconfig: 2345 70 30


nginx-fcgi -l /var/log/nginx/nginx-fcgi.log -pid /var/run/nginx-fcgi.pid -S /var/run/nginx-fcgi.sock
chown www:www /var/run/nginx-fcgi.sock

添加开机启动

1)

chmod +x /usr/sbin/nginx-fcgi
chmod 755 /etc/init.d/perl-fastcgi
chkconfig perl-fastcgi on

2)

编辑  /etc/rc.d/rc.local文件 

添加

nginx-fcgi -l /var/log/nginx/nginx-fcgi.log -pid /var/run/nginx-fcgi.pid -S /var/run/nginx-fcgi.sock
chown www:www /var/run/nginx-fcgi.sock

测试脚本(声明和代码之前至少有一空行隔开) :

python

#!/usr/bin/python2.5
# File:/usr/local/apache/cgi-bin/python.py 
# -*- coding: utf-8 -*-
print "Content-type: text/html;charset=utf-8 "
print 'Hello World!'

php:

#!/usr/local/php/bin/php -q
# File: File:/usr/local/apache/cgi-bin/i.php
<?php
    phpinfo();
?>

perl:

#!/usr/bin/perl

print "Content-type: text/html ";
print "Hello, world.";

SHELL:

#!/bin/bash
# File: /usr/local/apache/cgi-bin/bash.sh 
echo -e "Content-type: text/html;charset=utf-8 "
echo CGI/1.0 test script report:$(uuidgen)'<br>'

echo argc is $#. argv is "$*".'<br>'

echo SERVER_SOFTWARE = $SERVER_SOFTWARE '<br>'
echo SERVER_NAME = $SERVER_NAME '<br>'
echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE '<br>'
echo SERVER_PROTOCOL = $SERVER_PROTOCOL '<br>'
echo SERVER_PORT = $SERVER_PORT '<br>'
echo REQUEST_METHOD = $REQUEST_METHOD '<br>'
echo HTTP_ACCEPT = "$HTTP_ACCEPT" '<br>'
echo PATH_INFO = "$PATH_INFO" '<br>'
echo PATH_TRANSLATED = "$PATH_TRANSLATED" '<br>'
echo SCRIPT_NAME = "$SCRIPT_NAME" '<br>'
echo QUERY_STRING = "$QUERY_STRING" '<br>'
echo REMOTE_HOST = $REMOTE_HOST '<br>'
echo REMOTE_ADDR = $REMOTE_ADDR '<br>'
echo REMOTE_USER = $REMOTE_USER '<br>'
echo AUTH_TYPE = $AUTH_TYPE '<br>'
echo CONTENT_TYPE = $CONTENT_TYPE '<br>'
echo CONTENT_LENGTH = $CONTENT_LENGTH

原文地址:https://www.cnblogs.com/zhangwenzhao/p/3277565.html