我试图用Kubuntu服务器上的apache设置fastcgi已经有几天了。 尽pipe到处寻找,我无法做到这一点。 如果我尝试使用cgi应用程序运行该站点,则apache将挂起,并在超时后返回500错误。
这是我做的:
我确信已经安装并启用了mod_fastcgi:
# pwd /etc/apache2/mods-enabled # ls -lf* lrwxrwxrwx 1 root root 30 2010-07-22 10:01 fastcgi.conf -> ../mods-available/fastcgi.conf lrwxrwxrwx 1 root root 30 2010-07-22 10:01 fastcgi.load -> ../mods-available/fastcgi.load
据我所知,fastcgi.confconfiguration正确:
<IfModule mod_fastcgi.c> AddHandler fastcgi-script .fcgi #FastCgiWrapper /usr/lib/apache2/suexec FastCgiIpcDir /var/lib/apache2/fastcgi </IfModule>
我正在使用这个非常简单的示例脚本来testing设置:
#include <iostream> using namespace std; int main() { cout<<"Content-type: text/plain"<<endl<<endl; cout<<"Hello World!"<<endl; return 0; }
我在文件夹中添加一个.htaccess文件:
Options +ExecCGI -Indexes
Apache的error.log说:
Content-type: text/plain Hello World! [Sat Aug 28 09:08:23 2010] [warn] FastCGI: (dynamic) server "/var/www/fcgitest/run.fcgi" (pid 27758) terminated by calling exit with status '0'
看来输出写入错误日志! 有没有丢失的套接字configuration,在哪里?
你的示例脚本是错误的。 它需要明确支持FastCGI,例如通过fastcgi++或官方的FastCGI SDK 。
但是这更多的是StackOverflow的问题。
是的,正如joschi所指出的,CGI!= FastCGI。 CGI脚本在这种情况下会失败。
http://127.0.0.1/doc/libapache2-mod-fastcgi/mod_fastcgi.html
http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html
FastCGI规范合规性
FastCGI规范并没有完全实现,而且我也偏离了一些,导致了一些Apache特定的function。
stdout和stderr的文件描述符保持打开状态。 这是规范所禁止的。 我看不出有什么理由要求closures它们,而将它们打开,以防止没有完全移植到FastCGI的FastCGI应用程序失败。 这并不意味着应用程序不应该被修复,这样就不会发生这种情况,但是当使用第三方库(没有源代码)的时候,它是非常有用的,它可以写入stderr。 以这种方式写入标准输出或标准错误的任何内容都将被定向到主服务器日志 。