【问题标题】:Perl CGI or CGI::Fast under Apache 2.2 on Debian LennyDebian Lenny 上 Apache 2.2 下的 Perl CGI 或 CGI::Fast
【发布时间】:2011-05-26 08:10:28
【问题描述】:

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

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

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

我希望我的观点很清楚,因为这对我来说有点陌生......

谢谢

编辑
感谢 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);
    
  • 完成。

世界还不完美,但它终于可以工作了。

【问题讨论】:

    标签: perl apache upload cgi fastcgi


    【解决方案1】:

    除了将使用 CGI 更改为使用 CGI::Fast 之外,您还需要做更多的事情。确保使用 while 循环包装 CGI 脚本,如文档所述 http://p3rl.org/CGI::Fast

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

    【讨论】:

    • 另外,如果您在 cgi 中使用未初始化的全局变量 (ugh),您可能需要修复它..
    猜你喜欢
    • 1970-01-01
    • 2012-01-19
    • 2013-10-26
    • 2013-05-02
    • 2011-04-26
    • 2015-05-22
    • 1970-01-01
    • 2012-07-05
    • 2020-05-27
    相关资源
    最近更新 更多