tutorial c nginx fastcgi

tutorial - Lenguaje C FastCGI con Nginx



php fpm (5)

Aquí hay un gran ejemplo de nginx, ubuntu, c ++ y fastcgi.

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

Si quieres ejecutar su código, lo puse en un repositorio git con instrucciones. Puedes comprobarlo y ejecutarlo por ti mismo. Solo lo he probado en Ubuntu.

https://github.com/homer6/fastcgi

Estoy intentando ejecutar una aplicación fastcgi escrita en lenguaje C detrás del servidor web Nginx. El navegador web nunca termina de cargarse y la respuesta nunca se completa. No estoy seguro de cómo abordar y depurar. Cualquier idea sería apreciada.

La aplicación hello world se tomó de fastcgi.com y se simplificó para que se vea así:

#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; }

El ejecutable de salida se ejecuta con uno de los siguientes:

cgi-fcgi -connect 127.0.0.1:9000 a.out

o

spawn-fcgi -a120.0.0.1 -p9000 -n ./a.out

La configuración de Nginx es:

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; } }




Una vez que su aplicación maneje las solicitudes de fastcgi correctamente, debe encargarse de iniciar la aplicación. nginx nunca generará los procesos fcgi en sí, por lo que necesita un demonio que se encargue de eso.

Recomiendo usar uwsgi para gestionar procesos fcgi. Es capaz de generar procesos de trabajo que están listos para la entrada y reiniciarlos cuando mueren. Es altamente configurable y fácil de instalar y usar.

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

Aquí está mi configuración:

[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

Esto se integra muy bien como servicio systemd, pero también puede ejecutarse sin.


FCGI_Accept llamar a FCGI_Accept en el bucle while:

while(FCGI_Accept() >= 0)

Tienes FCGI_Accept >= 0 en tu código. Creo que eso hace que la dirección de la función FCGI_Accept se compare con 0 . Como la función existe, la comparación nunca es falsa, pero la función no se está invocando.