gpt4 book ai didi

apache - 使用 fastcgi_module 在 Apache 下永远运行的 CGI 脚本 (Perl)

转载 作者:行者123 更新时间:2023-12-02 04:37:36 24 4
gpt4 key购买 nike

我正在尝试使用 fastcgi_module 在 Apache2 (Apache/2.4.6 (Ubuntu)) 中运行 cgi 脚本。这是我设置的虚拟主机

<VirtualHost *:8080>
ServerName cgi.local
DocumentRoot /home/noobeana/CGI
<Directory /home/noobeana/CGI>
AllowOverride All
Order allow,deny
Allow from all
Require all granted
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
SetHandler fastcgi-script
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

这是我创建的用于运行测试的 Perl 脚本(775 版本)(/home/noobeana/CGI/test.pl):

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello there!<br />\n";

Perl 可执行文件的路径确实是 /usr/bin/perl 并且其他一切看起来都很好,但是当我打开 http://cgi.local:8080/test.pl 时在浏览器中,脚本将永远运行——我必须停止 Apache 以强制退出。此外,print 正在输出到 Apache 的错误日志(而不是浏览器),只要脚本正在运行,它就会显示大量以下行:

[Fri Feb 07 10:24:54.059738 2014] [:warn] [pid 4708:tid 140365322880896] FastCGI: (dynamic) server "/home/noobeana/CGI/test.pl" started (pid 4771)
Content-type: text/html

Hello there!<br />
[Fri Feb 07 10:24:54.078938 2014] [:warn] [pid 4708:tid 140365322880896] FastCGI: (dynamic) server "/home/noobeana/CGI/test.pl" (pid 4771) terminated by calling exit with status '0'
[Fri Feb 07 10:24:59.663494 2014] [:warn] [pid 4708:tid 140365322880896] FastCGI: (dynamic) server "/home/noobeana/CGI/test.pl" restarted (pid 4773)
Content-type: text/html

Hello there!<br />
[Fri Feb 07 10:24:59.665855 2014] [:warn] [pid 4708:tid 140365322880896] FastCGI: (dynamic) server "/home/noobeana/CGI/test.pl" (pid 4773) terminated by calling exit with status '0'

我不确定这两个问题(print 没有在浏览器中输出和脚本没有终止)是否相关。

最佳答案

您尝试执行的操作是不可能的。 fastcgi_module 只能运行实现 FastCGI 接口(interface)的脚本,您编写的脚本不支持该接口(interface)。相反,fastcgi_module 反复尝试启动您的“FastCGI”脚本,看到它打印一些东西并立即退出——这是 FastCGI 脚本不应该做的——并且挠头想知道它做错了什么。

可以使用 CGI::Fast 模块实现实现正确接口(interface)的简单脚本:

#!/usr/bin/perl
use strict;
use CGI::Fast;
while (my $CGI = CGI::Fast->new) {
print $CGI->header();
print "Hello there\n";
}

(FastCGI 协议(protocol)有点复杂,所以不使用模块就没有合理的方法来实现它。)

关于apache - 使用 fastcgi_module 在 Apache 下永远运行的 CGI 脚本 (Perl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21632842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com