¿Por qué FastCGI y C en Nginx en lugar de PHP?

¿Por qué FastCGI y C en Nginx en lugar de PHP?

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:

Ejecutar un script C FastCGI usando NGINX

[artículo de introducción] Programa Nginx + FastCGI (C/C++) Demostración e implementación para compilación

Respuesta2

Dos posibles soluciones:

  1. Utilice el servidor CGIHTTP de Python. Sin configuración, simplemente coloque su programa compilado en un cgi-bindirectorio y comience python -m CGIHTTPServeren 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).

  2. 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.

información relacionada