linux用nginx搭建web服务器

linux用nginx搭建web服务器

浏览次数:
信息来源: 用户投稿
更新日期: 2026-05-09
文章简介

perl+fastcgi+nginx搭建nginx+fastcgi是php下最流行的一套环境了,那perl会不会也有fastcgi呢,当然有,今天来搭建下nginx下perl的fastcgi.性

2025阿里云双十一服务器活动

perl+fastcgi+nginx搭建

nginx+fastcgi是php下最流行的一套环境了,那perl会不会也有fastcgi呢,当然有,今天来搭建下nginx下perl的fastcgi.性能方面也不亚于php,但是现在web程序php的流行程度perl无法比拟了,性能再好也枉然,但是部分小功能可以考虑使用perl的fastcgi来搞定.进入正题.1.准备软件环境:

nginxperl:系统自带fastcgi1.2perl安装一般linux都有自带perl,可以不用安装,如果确实没有,请执行:

#yuminstallperl

1.3perl-fastcgi安装

#wgethttp://www.cpan.org/modules/by-module/fcgi/fcgi-0.74.tar.gz

#tar-xzvffcgi-0.74.tar.gz

#makeinstall

2.nginx虚拟主机配置

server_nametest.jb51.net;

#access_log/data/logs/nginx/test.jb51.net.access.logmain;

indexindex.htmlindex.phpindex.html;

root/data/site/test.jb51.net;

fastcgi_pass127.0.0.1:8999;

#fastcgi_passunix:/var/run/jb51.net.perl.sock;

}

如果想把tcp/ip方式改为socket方式,可以修改fastcgi-wrapper.pl.

$socket=fcgi::opensocket("127.0.0.1:8999",10);useipsockets

3.配置脚本

3.1fastcgi监听脚本文件路径:/usr/bin/fastcgi-wrapper.pl

#thiskeepstheprogramaliveorsomethingafterexec'ingperlscripts

*core::global::exit=sub{die"fakeexit

exitunless$@=~/^fakeexit/;

chdir'/'ordie"can'tchdirto/:$!";

defined(my$pid=fork)ordie"can'tfork:$!";

setsidordie"can'tstartanewsession:$!";

$socket=fcgi::opensocket("127.0.0.1:8999",10);#useipsockets

$request=fcgi::request(\*stdin,\*stdout,\*stderr,\%req_params,$socket);

if($request){request_loop()};

fcgi::closesocket($socket);

while($request->accept()>=0){

#processinganystdininputfromwebserver(forcgi-postactions)

$req_len=0+$req_params{'content_length'};

if(($req_params{'request_method'}eq'post')&&($req_len!=0)){

while($bytes_read<$req_len){

my$bytes=read(stdin,$data,($req_len-$bytes_read));

lastif($bytes==0||!defined($bytes));

$stdin_passthrough.=$data;

if((-x$req_params{script_filename})&&#caniexecutethis?

(-s$req_params{script_filename})&&#isthisfileempty?

(-r$req_params{script_filename})#canireadthisfile?

pipe(child_rd,parent_wr);

my$pid=open(kid_to_read,"-|");

print("content-type:text/plain\r

print"error:cgiappreturnednooutput-";

print"executing$req_params{script_filename}failed!

printparent_wr$stdin_passthrough;

while(my$s=<kid_to_read>){print$s;}

foreach$key(keys%req_params){

$env{$key}=$req_params{$key};

#cdtothescript'slocaldirectory

linux用nginx搭建web服务器

#fcntl(child_rd,f_dupfd,0);

syscall(&sys_dup2,fileno(child_rd),0);

#open(stdin,"<&child_rd");

exec($req_params{script_filename});

print("content-type:text/plain\r

print"error:nosuchcgiapp-$req_params{script_filename}maynot";

print"existorisnotexecutablebythisprocess.

}

3.2fastcgi自启动服务脚本:

文件路径:/etc/rc.d/init.d/perl-fastcgi

文件路径:/etc/rc.d/init.d/perl-fastcgi

#nginx–thisscriptstartsandstopsthenginxdaemon

#description:nginxisanhttp(s)server,http(s)reverse\

#proxyandimap/pop3proxyserver

#config:/opt/nginx/conf/nginx.conf

#pidfile:/opt/nginx/logs/nginx.pid

./etc/rc.d/init.d/functions

#sourcenetworkingconfiguration.

#checkthatnetworkingisup.

["$networking"="no"]&&exit0

perlfastcgi="/usr/bin/fastcgi-wrapper.pl"

lockfile=/var/lock/subsys/perl-fastcgi

[$retval-eq0]&&touch$lockfile

[$retval-eq0]&&rm-f$lockfile

echo-n$”reloading$prog:”

rh_status>/dev/null2>&1

echo$"usage:$0{start|stop|status|restart|condrestart|try-restart|reload|force-reload}"

esac

3.3设置脚本权限

#chmoda+x/usr/bin/fastcgi-wrapper.pl

/usr/local/nginx-1.4.2/sbin/nginx

#/etc/init.d/perl-fastcgistart

4.2perl测试文件:文件路径/data/site/test.jb51.net/test.pl

print"content-type:text/html

<html><head><title>perlenvironmentvariables</title></head>

<h1>perlenvironmentvariables</h1>

foreach$key(sort(keys%env)){

print"$key=$env{$key}<br>

print"</body></html>";

perl模块的使用如果对于一个绝大部分内容是静态的网站,只有极少数的地方需要动态显示,碰巧你又了解一点perl知识,那么nginx+perl的结合就能很好解决问题。要想nginx支持perl脚本,在编译nginx时候需要如下参数:

can'tlocateextutils/embed.pmin@inc(@inccontains:/usr/lib/perl5/5.10.0/i386-linux-thread-multi/usr/lib/perl5/5.10.0/usr/local/lib/perl5/site_perl/5.10.0/i386-linux-thread-multi/usr/local/lib/perl5/site_perl/5.10.0/usr/lib/perl5/vendor_perl/5.10.0/i386-linux-thread-multi/usr/lib/perl5/vendor_perl/5.10.0/usr/lib/perl5/vendor_perl/usr/local/lib/perl5/site_perl.)

你的机器上可能需要安装perl-develperl-extutils-embed,对于centos系统,直接使用yum搞定,例如:

yum-yinstallperl-develperl-extutils-embed

nginx中使用perl有两种方法,一种是直接在配置文件写,还有一种是把perl脚本写在外部文件中,下面主要介绍一下第二种用法。假设nginx的根目录为/usr/local/nginx,perl脚本存放的目录为nginx的根目录下的perl/lib下,脚本名字为test.pm,nginx配置为:

}

packagepkg_name;

$r->send_http_header('text/html;charset=utf-8');

my@arr=split('/',$r->uri);

if(!$username||($usernameeq"")){

$r->print('hello,younameis:<strong>'.$username.'</strong>');

__end__

  • $r->uri–得到请求的url.

  • $r->variable(name[,value])–设置变量的值

  • 以上就是Linux下如何用Nginx作Perl程序服务器及其中Perl模块的详细内容,更多请关注主机测评网其它相关文章!

    标签:
    为什么SSD托管很重要(为您的业务带来的好处)
    « 上一篇
    返回列表
    下一篇 »

    如本文对您有帮助,就请抽根烟吧!