首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带Nginx的C语言FastCGI

带Nginx的C语言FastCGI
EN

Stack Overflow用户
提问于 2010-01-28 03:30:10
回答 5查看 23.6K关注 0票数 20

我正在尝试在Nginx web服务器后面运行一个用C语言编写的fastcgi应用程序。web浏览器永远不会完成加载,响应也永远不会完成。我不确定如何接近它并进行调试。任何洞察力都将不胜感激。

hello world应用程序取自fastcgi.com,并简化为如下所示:

代码语言:javascript
复制
#include "fcgi_stdio.h"
#include <stdlib.h>

int main(void)
{

 while(FCGI_Accept >= 0)
 {
  printf("Content-type: text/html\r\nStatus: 200 OK\r\n\r\n");

 }

  return 0;
}

使用以下任一命令执行输出可执行文件:

cgi-fcgi -connect 127.0.0.1:9000 a.out

生成器-fcgi -a120.0.0.1 -p9000 -n ./a.out

Nginx配置为:

代码语言:javascript
复制
server {
        listen   80;
        server_name _;

 location / {
                        # host and port to fastcgi server
                        root   /home/user/www;
                        index  index.html;

                        fastcgi_pass 127.0.0.1:9000;
 }
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-01-28 03:32:52

您需要在while循环中调用FCGI_Accept

代码语言:javascript
复制
while(FCGI_Accept() >= 0)

您的代码中包含FCGI_Accept >= 0。我认为这会导致将FCGI_Accept函数的地址与0进行比较。因为函数存在,所以比较永远不会为假,但函数不会被调用。

票数 18
EN

Stack Overflow用户

发布于 2013-01-11 15:43:33

这是nginx,ubuntu,c++和fastcgi的一个很好的例子。

http://chriswu.me/blog/writing-hello-world-in-fcgi-with-c-plus-plus/

如果你想运行他的代码,我已经把它放到了一个带有指令的git repo中。您可以自己检查并运行它。我只在Ubuntu上测试过。

https://github.com/homer6/fastcgi

票数 5
EN

Stack Overflow用户

发布于 2014-06-24 14:50:10

在您的应用程序正确处理fastcgi-request之后,您需要注意启动应用程序。nginx永远不会自己产生fcgi进程,所以你需要一个守护进程来处理它。

我推荐使用uwsgi来管理fcgi进程。它能够产生准备好输入的工作进程,并在它们死亡时重新启动它们。它具有高度的可配置性,易于安装和使用。

http://uwsgi-docs.readthedocs.org/en/latest/

下面是我的配置:

代码语言:javascript
复制
[uwsgi]
fastcgi-socket = /var/run/apc.sock
protocol = fastcgi
worker-exec = /home/app/src/apc.bin
spooler = /home/app/spooler/
processes = 15
enable-threads = true
master = true
chdir = /home/app/
chmod-socket = 777

这可以很好地集成为systemd服务,但也可以在没有系统服务的情况下运行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2149709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档