FastCGI es un protocolo binario para interconectar programas interactivos con un servidor web . Es una variación del anterior Common Gateway Interface (CGI). El objetivo principal de FastCGI es reducir la sobrecarga relacionada con la interconexión entre el servidor web y los programas CGI, lo que permite que un servidor gestione más solicitudes de páginas web por unidad de tiempo.
Common Gateway Interface (CGI) es un protocolo para interconectar aplicaciones externas con servidores web. Las aplicaciones CGI se ejecutan en procesos separados , que se crean al comienzo de cada solicitud y se eliminan al final. Este modelo de "un nuevo proceso por solicitud" hace que los programas CGI sean muy fáciles de implementar, pero limita la eficiencia y la escalabilidad. Con cargas elevadas, la sobrecarga del sistema operativo para la creación y destrucción de procesos se vuelve significativa. Además, el modelo de proceso CGI limita los métodos de reutilización de recursos, como la reutilización de conexiones de bases de datos, el almacenamiento en caché en memoria, etc.
Para abordar las deficiencias de escalabilidad de CGI, Open Market desarrolló FastCGI y lo introdujo por primera vez en su producto de servidor web a mediados de los años 1990. Open Market desarrolló originalmente FastCGI en parte como una respuesta competitiva a las interfaces de programación de aplicaciones (API) en proceso patentadas de Netscape ( Netscape Server Application Programming Interface (NSAPI)) para desarrollar aplicaciones web.
Aunque Open Market fue el primero en desarrollar FastCGI, varios otros fabricantes de servidores web lo implementaron. Sin embargo, su enfoque compitió con otros métodos para acelerar y simplificar la comunicación entre servidores y subprogramas. Los módulos de Apache HTTP Server , como mod_perl y mod_php, aparecieron casi al mismo tiempo y ganaron popularidad rápidamente. A partir de 2020 [actualizar], todos estos métodos, incluido CGI, siguen siendo de uso común.
En lugar de crear un nuevo proceso para cada solicitud, FastCGI utiliza procesos persistentes para gestionar una serie de solicitudes. Estos procesos son propiedad del servidor FastCGI, no del servidor web. [1]
Para atender una solicitud entrante, el servidor web envía información de la variable de entorno y la solicitud de página a un proceso FastCGI a través de un socket de dominio Unix , una tubería con nombre o una conexión de Protocolo de control de transmisión (TCP). Las respuestas se devuelven desde el proceso al servidor web a través de la misma conexión y, a continuación, el servidor web envía esa respuesta al usuario final . La conexión puede cerrarse al final de una respuesta, pero tanto el servidor web como los procesos de servicio FastCGI persisten. [2]
Cada proceso FastCGI individual puede gestionar muchas solicitudes durante su vida útil, lo que evita la sobrecarga que supone la creación y finalización de procesos por solicitud. El procesamiento simultáneo de varias solicitudes se puede realizar de varias formas: mediante una conexión con multiplexación interna (es decir, varias solicitudes en una conexión); mediante varias conexiones; o mediante una combinación de estos métodos. Se pueden configurar varios servidores FastCGI, lo que aumenta la estabilidad y la escalabilidad.
Los administradores y programadores de sitios web pueden descubrir que separar las aplicaciones web del servidor web en FastCGI tiene muchas ventajas sobre los intérpretes integrados ( mod_perl , mod_php , etc.). Esta separación permite reiniciar los procesos del servidor y de la aplicación de forma independiente, una consideración importante para sitios web con mucho tráfico. También permite la implementación de políticas de seguridad de servicios de alojamiento por aplicación, lo que es un requisito importante para los ISP y las empresas de alojamiento web. [3] Se pueden distribuir diferentes tipos de solicitudes entrantes a servidores FastCGI específicos que han sido equipados para manejar esos tipos de solicitudes de manera eficiente.
FastCGI se puede implementar en cualquier lenguaje que admita conectores de red . Dado que "FastCGI es un protocolo, no una implementación", no está estrechamente vinculado a ningún lenguaje. Existen interfaces de programación de aplicaciones (API) para: [18]
Los marcos recientes como Ruby on Rails , Catalyst , Django , Kepler y Plack permiten el uso con intérpretes integrados ( mod_ruby , mod_perl , mod_python o mod_lua, por ejemplo) o FastCGI.