fcgi_stdio和fcgiapp有什么区别?

时间:2013-09-11 11:14:38

标签: c++ c fastcgi lighttpd

我正在尝试快速开发fastcgi,因此我下载了libfcgi的参考实现,并尝试使用lighttpd运行测试程序。由于fcgi_stdio允许cgi向后兼容,我决定从此开始。 但是我无法让examples/tiny-fcgi.clighttpd一起使用,它产生了internal server errror 500,相同的配置允许运行lighttpd示例程序(http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModFastCGI,低于C/C++ FastCGI on lightty named socket)完美无瑕。但是,我完全不清楚为什么默认提供的示例不起作用。

问题:

  1. 参考实现中的examples / tiny-fcgi.c示例有什么问题导致lighttpd返回错误500?
  2. 对于c ++开发(fcgi_stdio,fcgiapp,Other),fastcgi的哪个实现更受欢迎? (fcgi包中有一些流,但我找不到好/任何文档)

3 个答案:

答案 0 :(得分:1)

我测试了unmodified example(Ubuntu / 13.10 / amd-64,Apache / 2.4.6,libapache2-mod-fastcgi / 2.4.7~0910052141-1.1,libfcgi-dev / 2.4.0-8.1 ubuntu4)它运行正常:

manuelz@garibaldi:~$ curl habrich/tiny-fcgi
<title>FastCGI Hello! (C, fcgi_stdio library)</title>
<h1>FastCGI Hello! (C, fcgi_stdio library)</h1>
Request number 2 running on host <i>habrich</i>

数目:

  1. 在不知道您的配置的情况下很难分辨,但这是一个黑暗的镜头:如果getenvundefinedNULL将返回SERVER_NAME
  2. fcgiapp是基础实现:我会将其用于新开发。 fcgi_stdio是与CGI兼容的包装器:用于迁移旧的CGI项目。 Quote

      

    fcgi_stdio在fcgiapp上实现为薄层

  3.      您可以在fcgiapp.h标题中找到fcgiapp的合适文档。

答案 1 :(得分:1)

我不知道你的问题与我的问题是否有相同的起源,但至少它有相同的症状。

tiny-fcgi示例有不同版本。我首先尝试了here给出的那个(例1)。此操作因内部服务器错误而失败。但是,给出here(基本相同)的示例有效。小而重要的区别在于工作代码使用

getenv("SERVER_NAME")

而不是

getenv("SERVER_HOSTNAME")

答案 2 :(得分:0)

对我来说并不完全相同,但如果我避免使用getenv示例运行没有错误,则必须发现getenv导致错误的原因