在Debian Lenny的Apache 2.2下Perl CGI或CGI :: Fast

时间:2010-12-16 04:34:06

标签: perl apache upload cgi fastcgi

我在Debian Lenny机器上有2个不同的Web服务器。一个运行FastCGI(TRAC),另一个Web服务器运行PHP和一些CGI脚本。所以我目前启用了2个Apache2模块(cgi和fcgi)以及相应的2个vhosts设置。我对这两个模块同时运行没有特别的兴趣。

所以我想继续运行Apache fastcgi模块,因为它看起来效率更高。

您能否确认以下评估是对还是正确?
1-我将无法为TRAC站点做任何改变/更改(已经运行fcgi)
2-我将不得不调整其他Web服务器vhost,使用fastcgi脚本的处理程序进行设置 3-我将只需要将perl模块从“使用CGI”更改为“使用CGI :: Fast”
4-我将能够保留perl现有CGI脚本的其余部分,而不进行其他更改 5-我不需要在Web服务器脚本中使用CGI :: Apache但CGI :: FastCGI(i / o当前的CGI模块)

我希望我的观点很明确,因为它对我来说有点陌生......

THX

修改
这是对Naveed和J-16的提示, 如果它可以帮助其他人,我会采取以下措施:

  • 哼,用CPAN安装CGI :: Fast,然后效果更好..
    在已安装libperl的Debian上

    perl -MCPAN -e shell
    cpan> install CGI::Fast
    
  • 将文件名从* .cgi更改为* .fcgi,

  • 包括下面由Naveed提供的fastcgi while循环,
  • 使用正确的fastcgi处理程序设置apache vhost(参见fastcgi doc
  • 启用了Apache fastcgi模块(a2enmod fastcgi)并禁用了cgi模块,
  • 检查了Apache设置中的fastcgi.conf文件,
  • 重启Apache,
  • 检查了作为Apache子进程运行的fastcgi(ps -afx),
  • 修复了一些脚本问题,已经在..但是在运行fastcgi时新出现,正如建议的那样(通过检查Apache日志检测到错误),
  • 编辑:修改了文件上传代码,因为初始脚本不再起作用(仍然不明白为什么),所以我不得不用这样一个替换while循环:

    open(FILE,">$upload_dir/$file_name")
    while ($bytes_count = read($file_query,$buffer,2096)) {
    $size += $bytes_count;
    print FILE $buffer;
    }
    close(FILE);
    
  • 进行。

世界尚未完美,但它终于有效。

1 个答案:

答案 0 :(得分:6)

除了更改使用CGI以使用CGI :: Fast之外,您还需要做更多的工作。确保用while循环包装CGI脚本,文档说明http://p3rl.org/CGI::Fast

use CGI::Fast;
while (CGI::Fast->new()) {
    # The original CGI code goes in here
}