如何使用 fastcgi 和简单的测试脚本设置 apache?

如何使用 fastcgi 和简单的测试脚本设置 apache?

几天前,我尝试在 Kubuntu 服务器上使用 apache 设置 fastcgi。尽管到处搜索,我还是无法让它工作。如果我尝试使用 cgi 应用程序运行网站,apache 会挂起,并在超时后返回 500 错误。

这是我所做的:

  • 我确保 mod_fastcgi 已安装并启用:

    # pwd
    /etc/apache2/mods-enabled
    # ls -l f*
    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.conf 配置正确:

    <IfModule mod_fastcgi.c>
      AddHandler fastcgi-script .fcgi
      #FastCgiWrapper /usr/lib/apache2/suexec
       FastCgiIpcDir /var/lib/apache2/fastcgi
    </IfModule>
    
  • 我用这个非常简单示例脚本测试设置:

    #include <iostream>
    using namespace std;
    int main()
    {
            cout<<"Content-type: text/plain"<<endl<<endl;
            cout<<"Hello World!"<<endl;
             return 0;
    }
    
  • 我编译了它。它在命令行下运行良好。
  • 我将其放在 Web 服务器可见的文件夹中:http://127.0.0.1/fcgitest/run.fcgi
  • 一开始我得到的是:“禁止访问。您无权访问此服务器上的 /fcgitest/run.fcgi。”。
  • .htaccess在文件夹中添加了一个文件:

    Options +ExecCGI -Indexes
    
  • 现在,当我尝试从我的网络浏览器访问脚本地址时,出现了我在开始时描述的症状:浏览器首先挂起,超时后,出现 500 内部服务器错误。
  • 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'
    

似乎输出已写入错误日志! 是否有某个地方缺少套接字配置?

答案1

正如 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 特定的功能。

stdout 和 stderr 的文件描述符保持打开状态。这是规范所禁止的。我看不出有任何理由要求关闭它们,并且保持它们打开状态可以防止未完全移植到 FastCGI 的 FastCGI 应用程序失败。这并不意味着不应该修复应用程序以避免发生这种情况,但在使用需要能够写入 stderr 的第三方库(没有源代码)时,这是非常有用的。以这种方式写入 stdout 或 stderr 的任何内容都将被定向到主服务器日志

相关内容