Nginx fastcgi-perl支持
作者:diege时间:2012-04-24
一、 安装软件
1、 安装sudo ,nginx和perl
# cd /usr/ports/security/sudo && make install clean
# cd/usr/ports/www/nginx && make install clean
# cd /usr/ports/lang/perl5.12 && make install clean
2、安装perl的支持模块
# perl -MCPAN -e "install FCGI" #可以安装
# perl -MCPAN -e "install IO" #无法安装
# perl -MCPAN -e "install MakeMaker" #未使用
# perl -MCPAN -e "install IO-All"
#fetch http://mirrors.ustc.edu.cn/CPAN/authors/id/G/GB/GBARR/IO-1.25.tar.gz
#fetch http://mirrors.devlib.org/cpan/authors/id/I/IN/INGY/IO-All-0.44.tar.gz
# fetch http://mirrors.devlib.org/cpan/authors/id/M/MS/MSCHWERN/ExtUtils-MakeMaker-6.62.tar.gz
1) IO
#tar -zxvf IO-1.25.tar.gz
# cd IO-1.25
# perl Makefile.PL
# make && make install
2)
# tar -zxvf ExtUtils-MakeMaker-6.62.tar.gz
# cd ExtUtils-MakeMaker-6.62
# perl Makefile.PL
# make && make install
3) IO-All
perl -MCPAN -e "install IO::String"
# tar -zxvf IO-All-0.44.tar.gz
# cd IO-All-0.44
# perl Makefile.PL
#make && make install
二、 启动脚本设置
http://wiki.codemongers.com/NginxSimpleCGI
脚本介绍
perl-fcgi.pl是一个perl写的wrapper实例
start_perl_cgi.sh是一个创建socket,启动wrapper以及将wrapper和socket绑定的shell脚本
# mkdir -p /usr/local/nginx/logs
# cp perl-fcgi.pl/usr/local/nginx/
# cp start_perl_cgi.sh /usr/local/nginx/
#chmod 755 /usr/local/nginx/perl-fcgi.pl
#chmod 755 /usr/local/nginx/start_perl_cgi.sh
#cat /usr/local/nginx/start_perl_cgi.sh
#!/bin/sh
#set -x
rundir=/usr/local/nginx
start () {
rm $rundir/now_start_perl_fcgi.sh 2>/dev/null
chown www:wheel $rundir/logs
echo "$rundir/perl-fcgi.pl -l $rundir/logs/perl-fcgi.log -pid $rundir/logs/perl-fcgi.pid -S $rundir/logs/perl-fcgi.sock" >>$rundir/now_start_perl_fcgi.sh
chown www: www $rundir/now_start_perl_fcgi.sh
chmod u+x $rundir/now_start_perl_fcgi.sh
sudo -u www $rundir/now_start_perl_fcgi.sh
echo "start perl-fcgi done"
}
stop () {
#pkill-f$rundir/perl-fcgi.pl
kill $(cat $rundir/logs/perl-fcgi.pid)
rm $rundir/logs/perl-fcgi.pid 2>/dev/null
rm $rundir/logs/perl-fcgi.sock 2>/dev/null
echo "stop perl-fcgi done"
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "USAGE:$0 start|stop|restart"
exit 1
esac
三、 配置nginx支持perl
Nginx与FastCGI的通信方式为Unix Socket。根据经验,IP Socket在高并发访问下比
Unix Socket稳定,但Unix Socket速度要比IP Socket快。
# vim /usr/local/etc/nginx/vhosts/www.example.com.conf
location ~ \.(cgi|pl|perl)$ {
#root html;
fastcgi_pass unix:/usr/local/nginx/logs/perl-fcgi.sock;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;
include fastcgi_params;
}
四、 测试
1、 测试文件
首页文件
# ee /data/vhosts/www.example.com/index.pl
#!/usr/bin/perl
print "Content-Type: text/html\n\n";
print "";
print "Hello,World!CGI is working!";
print "";
# ee /data/vhosts/www.example.com/getinfo.cgi
#!/usr/bin/perl
# disable filename globbing
set -f
echo "Content-type: text/plain; "
echo
echo CGI/1.0 test script report:
echo
echo argc is $#. argv is "$*".
echo
echo SERVER_SOFTWARE = $SERVER_SOFTWARE
echo SERVER_NAME = $SERVER_NAME
echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE
echo SERVER_PROTOCOL = $SERVER_PROTOCOL
echo SERVER_PORT = $SERVER_PORT
echo REQUEST_METHOD = $REQUEST_METHOD
echo HTTP_ACCEPT = "$HTTP_ACCEPT"
echo PATH_INFO = "$PATH_INFO"
echo PATH_TRANSLATED = "$PATH_TRANSLATED"
echo SCRIPT_NAME = "$SCRIPT_NAME"
echo QUERY_STRING = "$QUERY_STRING"
echo REMOTE_HOST = $REMOTE_HOST
echo REMOTE_ADDR = $REMOTE_ADDR
echo REMOTE_USER = $REMOTE_USER
echo AUTH_TYPE = $AUTH_TYPE
echo CONTENT_TYPE = $CONTENT_TYPE
echo CONTENT_LENGTH = $CONTENT_LENGTH
#chown www:www /data/vhosts/www.example.com/getinfo.cgi
#chown www:www
/data/vhosts/www.example.com/index.pl
#chmod 750 /data/vhosts/www.example.com/ index.pl
#chmod 750 /data/vhosts/www.example.com/ getinfo.cgi
2、启动
#/usr/local/rc.d/nginx> #/usr/local/nginx/start_perl_cgi.sh
3、浏览器访问测试
www.example.com/index.pl
www.example.com/getinfo.cgi
无法访问.
原因:
Freebsd 下nginx 是www运行.
没有权限读取perl-fcgi.sock文件
#ll /usr/local/nginx/logs/perl-fcgi.sock
srwxr-xr-x1 nobodywheel0 Apr 25 09:27 /usr/local/nginx/logs/perl-fcgi.sock
root@PubWeb1#chown www /usr/local/nginx/logs/perl-fcgi.sock
参考:http://blog.haohtml.com/archives/10909
http://www.tuanidc.com/bbs/thread-93976-1-1.html
http://wiki.codemongers.com/NginxSimpleCGI
页:
[1]