Quiero ejecutar un programa C (compilado) cada vez que Nginx recibe una solicitud de una URL, digamoshttps://myserver.com/programs/my-C-file.
Más específicamente, cuando se fusiona un PR en GitHub, quiero un enlace para iniciar un proceso de compilación y lanzamiento personalizado escrito en C (quiero usar C porque el proceso de compilación es complejo. Hay muchos pasos y es más fácil analizar la salida estándar en C que Bash o PHP).
Pero, ¿hay alguna razón por la que debería usar FastCGI para activar el binario C directamente en lugar de un archivo PHP exec('my C program')
?
Obviamente no obtengo más que unos pocos de estos cada pocos días, así que no me preocupa la ampliación, y parece que FastCGI requiere mucha configuración adicional, mientras que PHP puedo usarlo de inmediato. Simplemente cree una ejecución de archivo PHP exec()
y cree un bloque en Nginx.
O tal vez estoy pensando mal en todo este proceso y hay una manera más fácil de hacerlo.
Respuesta1
Sí, es posible utilizar nginx y FastCGI para ejecutar su binario C. A continuación se ofrece una descripción general aproximada de los pasos necesarios:
- Instalar nginx
- Instalar spawn-fcgi
- Instalar la base de datos fastcgi (opcional)
- Cree una configuración de nginx vhost con un servidor que escuche su IP/dominio y una ubicación que envíe un FCGI ascendente al host/puerto local.
- Compile su programa C (su programa debe incluir
while (FCGI_Accept() >= 0) { }
) - Inicie el proceso spawn-fcgi para escuchar en localhost/port como contenedor para su programa.
Más para leer:
Respuesta2
Dos posibles soluciones:
Utilice el servidor CGIHTTP de Python. Sin configuración, simplemente coloque su programa compilado en un
cgi-bin
directorio y comiencepython -m CGIHTTPServer
en el directorio principal. Puede llamar a su programa en path/cgi-bin/yourprogramname
. Este ya es un servidor HTTP en funcionamiento, si aún desea tener Nginx frente a él, configúrelo para un proxy inverso simple (proxy_pass debería ser suficiente).Utilice el soporte CGI nativo de Apache. te voy a referir adocumentación de apachepara la configuración, la estructura del directorio es equivalente a la primera opción.
También puede reducir la cantidad de piezas móviles no usando C sino un lenguaje como Go porque puede escribir un servidor HTTP en Go en aproximadamente 10 líneas que pueden llamar a una función para ejecutar el proceso de compilación real.