【问题标题】:What is the difference between fcgi_stdio and fcgiapp?fcgi_stdio 和 fcgiapp 有什么区别?
【发布时间】:2023-05-28 04:39:01
【问题描述】:
我正在尝试开始进行 fastcgi 开发,因此我下载了libfcgi 的参考实现并尝试让测试程序与lighttpd 一起运行。由于fcgi_stdio 允许cgi 向后兼容,我决定从它开始。
但是我无法让examples/tiny-fcgi.c 与lighttpd 一起工作,它产生了internal server errror 500,相同的配置允许运行lighttpd 示例程序(http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModFastCGI,低于C/C++ FastCGI on lightty named socket)完美无缺。但是,我完全不清楚为什么默认提供的示例不起作用。
问题:
- 参考实现中的 examples/tiny-fcgi.c 示例有什么问题导致 lighttpd 返回错误 500?
- 哪个 fastcgi 实现更适合 c++ 开发(fcgi_stdio、fcgiapp、其他)? (fcgi 包中有一些流的东西,但是我没有找到好的/任何文档)
【问题讨论】:
标签:
c++
c
fastcgi
lighttpd
【解决方案1】:
对我来说并不完全相同,但如果我避免使用 getenv 示例运行时没有错误,则必须找出为什么 getenv 会导致错误
【解决方案2】:
我不知道你的问题是否和我的问题一样,但至少有相同的症状。
tiny-fcgi 示例有不同的版本。我首先尝试了给定的here(示例1)。这因内部服务器错误而失败。但是,给定的示例 here (基本相同)有效。微小但关键的区别是工作代码使用
getenv("SERVER_NAME")
而不是
getenv("SERVER_HOSTNAME")
【解决方案3】:
我已经测试了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.1ubuntu4)它运行正常:
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>
答案:
- 如果不知道您的配置很难判断,但这里有一个在黑暗中的镜头:如果
SERVER_NAME 是 undefined,getenv 将返回 NULL。
-
fcgiapp 是基本实现:我会使用它进行新开发。 fcgi_stdio 是与 CGI 兼容的包装器:使用它来迁移遗留 CGI 项目。 Quote:
fcgi_stdio 被实现为 fcgiapp 之上的一个薄层
您可以在
fcgiapp.h 标头中找到适合
fcgiapp 的文档。