我正在尝试在Nginx web服务器后面运行一个用C语言编写的fastcgi应用程序。web浏览器永远不会完成加载,响应也永远不会完成。我不确定如何接近它并进行调试。任何洞察力都将不胜感激。
hello world应用程序取自fastcgi.com,并简化为如下所示:
#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配置为:
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;
}
}
发布于 2010-01-28 03:32:52
您需要在while
循环中调用FCGI_Accept
:
while(FCGI_Accept() >= 0)
您的代码中包含FCGI_Accept >= 0
。我认为这会导致将FCGI_Accept
函数的地址与0
进行比较。因为函数存在,所以比较永远不会为假,但函数不会被调用。
发布于 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上测试过。
发布于 2014-06-24 14:50:10
在您的应用程序正确处理fastcgi-request之后,您需要注意启动应用程序。nginx永远不会自己产生fcgi进程,所以你需要一个守护进程来处理它。
我推荐使用uwsgi来管理fcgi进程。它能够产生准备好输入的工作进程,并在它们死亡时重新启动它们。它具有高度的可配置性,易于安装和使用。
http://uwsgi-docs.readthedocs.org/en/latest/
下面是我的配置:
[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服务,但也可以在没有系统服务的情况下运行。
https://stackoverflow.com/questions/2149709
复制相似问题