FastCGI es un protocolo binario para interconectar programas interactivos con un servidor web . Es una variación de la interfaz de puerta de enlace común (CGI) anterior. El objetivo principal de FastCGI es reducir la sobrecarga relacionada con la interfaz entre el servidor web y los programas CGI, permitiendo que un servidor maneje más solicitudes de páginas web por unidad de tiempo.
Historia
Common Gateway Interface (CGI) es un protocolo para conectar aplicaciones externas a 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 simples 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 base 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 la década de 1990. Mercado Abierto desarrollado originalmente FastCGI en parte como una respuesta competitiva a Netscape 's de propiedad, en proceso de interfaces de programación de aplicaciones (API) ( Aplicación de servidor de Netscape Interfaz de programación (NSAPI)) para el desarrollo de aplicaciones Web.
Aunque fue desarrollado primero por Open Market, FastCGI luego fue implementado por varios otros fabricantes de servidores web. Sin embargo, su enfoque compitió con otros métodos para acelerar y simplificar la comunicación servidor-subprograma. Los módulos del servidor HTTP Apache como mod_perl y mod_php aparecieron casi al mismo tiempo y ganaron popularidad rápidamente. A partir de 2020[actualizar], todos estos diversos métodos, incluido CGI, siguen siendo de uso común.
Detalles de implementacion
En lugar de crear un nuevo proceso para cada solicitud, FastCGI usa procesos persistentes para manejar 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 variables de entorno y la solicitud de página a un proceso FastCGI a través de un socket de dominio Unix , una canalización 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 el servidor web luego entrega esa respuesta al usuario final . La conexión puede cerrarse al final de una respuesta, pero tanto el servidor web como los procesos del servicio FastCGI persisten. [2]
Cada proceso FastCGI individual puede manejar muchas solicitudes durante su vida, evitando así la sobrecarga de la creación y terminación del proceso por solicitud. El procesamiento de múltiples solicitudes al mismo tiempo se puede realizar de varias maneras: mediante el uso de una conexión con multiplexación interna (es decir, múltiples solicitudes a través de una conexión); mediante el uso de múltiples conexiones; o mediante una combinación de estos métodos. Se pueden configurar varios servidores FastCGI, lo que aumenta la estabilidad y escalabilidad.
Los administradores y programadores de sitios web pueden encontrar 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 que los procesos del servidor y de la aplicación se reinicien de forma independiente, una consideración importante para los sitios web ocupados. También permite la implementación de políticas de seguridad del servicio de alojamiento por aplicación, 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.
Servidores web que implementan FastCGI
- Nota: a menos que se indique, se desconoce la integridad de la implementación de FastCGI
- Servidor HTTP Apache (parcial)
- Implementado por mod_fcgid . Este módulo solía ser de terceros, pero se le otorgó a The Apache Software Foundation (ASF) como un subproyecto de Apache Server en 2009, dirigido por Chris Darroch. [4] Solo admite sockets de dominio Unix, no sockets TCP. [5]
- Un módulo de terceros También se está utilizando mod_fastcgi . Durante un tiempo, este módulo ya no se compiló correctamente en Apache 2.4.x, [6] aunque ese problema se ha resuelto con una bifurcación del proyecto original. [7]
- El diseño de Apache 1.x prohíbe la multiplexación de solicitudes a través de una conexión, [8] por lo que esto no es compatible
- En Apache 2.4, Se agregó mod_proxy_fcgi , que admite servidores TCP FastCGI.
- Caddy [9]
- Cherokee [10]
- Hiawatha [11]
- Compatibilidad con FastCGI de equilibrio de carga
- Soporta servidores FastCGI chrooted
- Embarcadero [12]
- Kerio WebSTAR
- Lighttpd [13]
- Servidor web LiteSpeed
- Microsoft IIS [14]
- Nginx [15]
- NaviServer
- Servidor web Oracle iPlanet
- OpenBSD 's httpd (8) [16]
- Servidor web Open Market
- Servidor de aplicaciones y web de resina
- Servidor web Roxen
- Servidor web ShimmerCat [17]
- Servidor web Zeus
Enlaces de idioma para su API
FastCGI se puede implementar en cualquier idioma que admita sockets de red . Dado que "FastCGI es un protocolo, no una implementación", no está estrictamente vinculado a ningún idioma. Existen interfaces de programación de aplicaciones (API) para: [18]
- Ada [19]
- Delphi , Lazarus Free Pascal [20]
- C , C ++
- Esquema de pollo
- Lisp común [21]
- D
- Eiffel [22]
- Erlang
- GnuCOBOL
- Ir
- Esquema de astucia
- Haskell
- VSI BÁSICO para OpenVMS
- Java [23] [12]
- Lua
- node.js [24]
- OCaml
- Perl [25]
- PHP (a través de php-fpm, [26] o HipHop para PHP [27] )
- Pitón
- Rubí
- Óxido [28]
- PequeñaEiffel
- Smalltalk : FasTalk y Dolphin Smalltalk
- Tcl
- WebDNA
- Vala (a través de enlaces C)
- Xojo (anteriormente Realbasic, REAL Studio) [29]
Los marcos recientes como Ruby on Rails , Catalyst , Django , Kepler y Plack permiten su uso con los intérpretes integrados ( mod_ruby , mod_perl , mod_python o mod_lua , por ejemplo) o FastCGI.
Referencias
- ^ "Especificación FastCGI" . Mercado Abierto, Inc . 1996. Archivado desde el original el 19 de enero de 2016.
- ^ "FastCGI: una interfaz de servidor web de alto rendimiento" . Mercado Abierto, Inc . 1996. Archivado desde el original el 1 de octubre de 2010.
- ^ Heinlein, Paul (1 de noviembre de 1998). "FastCGI: aplicaciones persistentes para su servidor web" . Diario de Linux . Consultado el 4 de octubre de 2010 .
- ^ Módulo apache FastCGI mod_fcgid
- ^ Error de Debian # 450748: agregue soporte para servidores TCP / IP FastCGI
- ^ Problemas con Apache 2.4 y PHP-FPM
- ^ libapache-mod-fastcgi en Github
- ^ "FastCGI - El tesoro olvidado / Sección 2.3" . Archivado desde el original el 8 de febrero de 2010 . Consultado el 21 de febrero de 2006 .
- ^ Guía del usuario de Caddy - FastCGI
- ^ FastCGI para Cherokee
- ^ Cómo de FastCGI para Hiawatha
- ^ a b Soporte FastCGI en Jetty
- ^ FastCGI para Lighttpd
- ^ "Extensión FastCGI para IIS6.0 - RTM" . FastCGI para IIS . Microsoft. 2008-02-28 . Consultado el 29 de febrero de 2008 .
- ^ "Módulo FastCGI Nginx ngx_http_fastcgi_module" . nginx.org . Nginx, Inc . Consultado el 20 de junio de 2021 .
- ^ Confirmación inicial httpd (8) de OpenBSD
- ^ "Copia archivada" . Archivado desde el original el 21 de enero de 2018 . Consultado el 19 de septiembre de 2016 .CS1 maint: copia archivada como título ( enlace )
- ^ Bibliotecas de aplicaciones, kits de desarrollo
- ^ Matreshka
- ^ ExtPascal
- ^ Cómo utilizar FastCGI de Common Lisp
- ^ Goanna Eiffel
- ^ jFastCGI, un servlet Java que implementa el protocolo FastCGI
- ^ paquete node-fastcgi npm
- ^ Hay varios módulos FastCGI para Perl: FCGI (un módulo compilado escrito en C), FCGI :: Async (para aplicaciones FastCGI asíncronas), AnyEvent :: FCGI (paraaplicaciones basadas en AnyEvent ), FCGI :: EV (para EV - basadas en aplicaciones), CGI :: Fast (interfaz similar aPerl CGI para FastCGI), FCGI :: Client (una biblioteca cliente FastCGI) y Net :: FastCGI (constantes y funciones para construir y analizar mensajes FastCGI).
- ^ [1]
- ^ Más rápidoCGI con HHVM
- ^ [2]
- ^ REAL Studio Web Edition, crea aplicaciones web llamadas a través de FastCGI Archivado 2011-02-08 en Wayback Machine
enlaces externos
- Bifurcación del sitio web oficial FastCGI
- Especificación FastCGI (copia de seguridad del sitio)
- Respaldo secundario
- mod_fastcgi: bifurcación del módulo FastCGI para Apache 1.xy 2.x que admiten aplicaciones externas
- mod_fcgid Un módulo FastCGI para Apache 2.x
- Microsoft FastCGI
- Módulo Apache v2.x mod_proxy FastCGI