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

hor*_*bzz 1 apache perl 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-我不需要使用CGI :: Apache但CGI: :Web服务器脚本中的FastCGI(i/o当前CGI模块)

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

谢谢

编辑:
thx为Naveed和J-16的提示,
这是我做的,如果它可以帮助其他人让它工作:

  • 哼,用CPAN安装CGI :: Fast,然后它运行得更好..
    在Debian上已经安装了libperl

    perl -MCPAN -e shell
    cpan> install CGI::Fast
    
    Run Code Online (Sandbox Code Playgroud)
  • 将文件名从*.cgi更改为*.fcgi,

  • 包括下面由Naveed建议的fastcgi while循环,
  • 使用正确的fastcgi处理程序设置apache vhost(请参阅fastcgi doc)
  • 启用Apache fastcgi模块(a2enmod fastcgi)并禁用cgi模块,
  • 检查Apache设置中的fastcgi.conf文件,
  • 重启Apache,
  • 检查fastcgi作为Apache子进程运行(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);
    
    Run Code Online (Sandbox Code Playgroud)
  • 完成.

世界还不完美,但终于有效了.

Nav*_*eed 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
}
Run Code Online (Sandbox Code Playgroud)