我正在尝试使用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'ed ):{/ 1}}:
/home/noobeana/CGI/test.pl
Perl可执行文件的路径确实是#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello there!<br />\n";
,其他一切看起来都不错,但是当我在浏览器中打开http://cgi.local:8080/test.pl脚本永远运行时 - 我必须停止Apache强制退出。此外,/usr/bin/perl
正在输出到Apache的错误日志(而不是浏览器),只要脚本正在运行,它就会显示以下多行:
print
我不确定这两个问题(浏览器中没有输出[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'
和脚本没有终止)是否相关。
答案 0 :(得分:5)
你想要做的是不可能的。 fastcgi_module
只能运行实现FastCGI接口的脚本,而您编写的脚本不支持该脚本。相反,fastcgi_module
一再尝试启动你的“FastCGI”脚本,看到它打印出一些内容并立即退出 - 哪些FastCGI脚本不应该这样做 - 并且不知道它在做错了什么。
实现正确接口的简单脚本可以使用CGI::Fast
模块实现:
#!/usr/bin/perl
use strict;
use CGI::Fast;
while (my $CGI = CGI::Fast->new) {
print $CGI->header();
print "Hello there\n";
}
(FastCGI协议有点复杂,所以没有使用模块就没有合理的方法来实现它。)