8288分类目录 8288分类目录 8288分类目录
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

记一次失败的Perl + Nginx + FastCGI 配置过程

来源:本站原创 浏览:153次 时间:2021-09-11

  这两天心血来潮,不知道为什么和 Perl + Nginx + FastCGI 配置 耗上了。但是失败了,记录如下:
1)安装Nginx 1.4.3 ,我的是WINDOWS 7 系统,修改配置文件如下:
 

location ~ \.(pl|cgi|perl)?$ {    root   var/www/huanghongqiao;            fastcgi_pass   127.0.0.1:9002;            fastcgi_index  index.cgi;            fastcgi_param  SCRIPT_FILENAME  cgi$fastcgi_script_name;            include        fastcgi_params;        }

2)安装FCGI 模块,使用 PPM。
 
 右键选择,然后点右上角绿色的箭头。


3)在 var/www/huanghongqiao/cgi 目录下新建 test.PL ,代码如下:


 

use FCGI;my $socket = FCGI::OpenSocket( "localhost:9002", 5 );my $request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket );my $count;while( $request->Accept() >= 0 ) {print "Content-type: text/html\r\n\r\n";print "nums is .. ";print ++$count;}FCGI::CloseSocket( $socket );

4) 运行这个test.PL 和 nginx,结果如下图:

5) 从网上下了 nginx-fcgi.pl回来修改,因为它不能在我的windows下运行,估计就是针对linux系统写的。
  修改后如下代码:

use FCGI;sub main {    $socket = FCGI::OpenSocket( "localhost:9002", 5 );$request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%req_params, $socket );if ($request) { request_loop()};FCGI::CloseSocket( $socket );}sub request_loop {while( $request->Accept() >= 0 ) {# processing any STDIN input from WebServer (for CGI-POST actions)$stdin_passthrough = '';$req_len = 0 + $req_params{'CONTENT_LENGTH'};if (($req_params{'REQUEST_METHOD'} eq 'POST') && ($req_len != 0) ){while ($req_len) {$stdin_passthrough .= getc(STDIN);$req_len--;}}        $file = $req_params{DOCUMENT_ROOT} . '/����,ǿ��' . $req_params{SCRIPT_FILENAME};$file =~ s@\\@/@g;#我测试过了,得拼接成绝对物理路径#我不知道怎么才能用$req_params{SCRIPT_FILENAME}这个相对路径#否则提示没有文件。if ((-x $file) &&  (-s $file) && (-r $file)){foreach $key ( keys %req_params){$ENV{$key} = $req_params{$key};}open $cgi_app, '-|', $file, $stdin_passthrough or print("Content-type: text/plain\r\n\r\n"); print "Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !\n"; # addlog($logfile, "Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !");if ($cgi_app) { print ; close $cgi_app; }} else {print("Content-type: text/plain\r\n\r\n");print "$file size is empty!\n" if not -s $file;print "$file can't execute!\n" if not -x $file;print "$file can't readable!\n" if not -r $file;print "Error: No such CGI app - $file may not exist or is not executable by this process.\n";}}}main();

6)test.pl 修改成简单的 print "" 等内容


7)运行这个  nginx-fcgi.pl,打开页面显示:

E:/nginx-1.4.3/var/www/huanghongqiao/cgi/test.pl can't execute!Error: No such CGI app - E:/nginx-1.4.3/var/www/huanghongqiao/cgi/test.pl may not exist or is not executable by this process.

如果我去掉 (-x $file) 这个测试,errlo.log 里就会显示 :


2013/10/27 20:20:56 [error] 1496#2172: *45 upstream prematurely closed FastCGI stdout while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /test.pl HTTP/1.1", upstream: "fastcgi://127.0.0.1:9002", host: "localhost:82"

8) 实在不知道怎么弄了,难道和 execute 有关系吗?Windows下不知道怎么修改可执行呢????

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net