Articulo de referencia

FastCGI

FastCGI es un protocolo binario para la interfaz entre programas interactivos y un servidor web . Es una variante de la interfaz CGI (Common Gateway Interface ) anterior. El obj...

FastCGI es un protocolo binario para la interfaz entre programas interactivos y un servidor web . Es una variante de la interfaz CGI (Common Gateway Interface ) anterior. El objetivo principal de FastCGI es reducir la sobrecarga asociada a la interfaz 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.

Historia

La Interfaz de Puerta de Enlace Común (CGI) es una especificación de interfaz que permite a las aplicaciones externas interactuar con servidores web. Las aplicaciones CGI se ejecutan en procesos separados , que se crean al inicio de cada solicitud y se eliminan al finalizar. Este modelo de "un nuevo proceso por solicitud" simplifica enormemente la implementación de programas CGI, pero limita la eficiencia y la escalabilidad. Con cargas elevadas, la sobrecarga del sistema operativo para la creación y eliminación de procesos se vuelve significativa. Además, el modelo de procesos CGI limita los métodos de reutilización de recursos, como la reutilización de conexiones a bases de datos, el almacenamiento en caché en memoria, etc.

Para solucionar 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. Open Market desarrolló originalmente FastCGI en parte como respuesta competitiva a las interfaces de programación de aplicaciones (API) propietarias e integradas de Netscape ( Interfaz de programación de aplicaciones de servidor de Netscape (NSAPI)) para el desarrollo de aplicaciones web.

Aunque fue desarrollado inicialmente por Open Market, FastCGI fue implementado posteriormente por varios otros fabricantes de servidores web. Sin embargo, su enfoque competía con otros métodos para acelerar y simplificar la comunicación entre el servidor y los subprogramas. 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 2020Todos estos métodos, incluyendo las imágenes generadas por computadora (CGI), siguen siendo de uso común.

Detalles de implementación

En lugar de crear un nuevo proceso para cada solicitud, FastCGI utiliza procesos persistentes para gestionar una serie de solicitudes. Estos procesos pertenecen al servidor FastCGI, no al 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 tubería con nombre o una conexión TCP ( Protocolo de Control de Transmisión ). El proceso devuelve las respuestas al servidor web a través de la misma conexión, y el servidor web las entrega al usuario final . La conexión puede cerrarse al finalizar la respuesta, pero tanto el servidor web como el proceso del servicio FastCGI persisten. [ 2 ]

Cada proceso FastCGI individual puede gestionar múltiples solicitudes a lo largo de su ciclo de vida, evitando así la sobrecarga que supone la creación y finalización de procesos para cada solicitud. El procesamiento simultáneo de varias solicitudes puede realizarse de diversas maneras: mediante una conexión con multiplexación interna (es decir, múltiples solicitudes a través de una sola conexión); mediante múltiples conexiones; o mediante una combinación de ambos métodos. Se pueden configurar varios servidores FastCGI, lo que aumenta la estabilidad y la 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 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 del servicio de alojamiento por aplicación, lo cual es un requisito importante para los ISP y las empresas de alojamiento web. [ 3 ] Los diferentes tipos de solicitudes entrantes se pueden distribuir a servidores FastCGI específicos que han sido equipados para manejar esos tipos de solicitudes de manera eficiente.

Servidores web que implementan FastCGI

Nota: salvo que se indique lo contrario, se desconoce la exhaustividad de la implementación de FastCGI.

Enlaces de lenguaje para su API

FastCGI se puede implementar en cualquier lenguaje que admita sockets de red . Dado que "FastCGI es un protocolo, no una implementación", no está estrechamente ligado a ningún lenguaje en particular. Existen interfaces de programación de aplicaciones (API) para: [ 18 ]

Los frameworks recientes como Ruby on Rails , Catalyst , Django , Kepler y Plack permiten su uso con intérpretes integrados ( mod_ruby , mod_perl , mod_python o mod_lua, por ejemplo) o con FastCGI.

Referencias

  1. "Especificación FastCGI" . Open Market, Inc. 1996. Archivado del original el 19 de enero de 2016.
  2. "FastCGI: Una interfaz de servidor web de alto rendimiento" . Open Market, Inc. 1996. Archivado del original el 1 de octubre de 2010.
  3. Heinlein, Paul (1 de noviembre de 1998). "FastCGI: Aplicaciones persistentes para su servidor web" . Linux Journal . Consultado el 4 de octubre de 2010 .
  4. Módulo FastCGI de Apache mod_fcgid
  5. Error de Debian n.° 450748: Por favor, añadan compatibilidad con servidores FastCGI TCP/IP.
  6. Problemas con Apache 2.4 y PHP-FPM
  7. libapache-mod-fastcgi en Github
  8. "FastCGI – El tesoro olvidado/ Sección 2.3" . Archivado del original el 8 de febrero de 2010. Consultado el 21 de febrero de 2006 .
  9. El transporte fastcgi — reverse_proxy (directiva Caddyfile) — Documentación de Caddy
  10. FastCGI para Cherokee
  11. "Tutorial de FastCGI para Hiawatha" . Archivado del original el 11 de octubre de 2018. Consultado el 27 de julio de 2010 .
  12. 1 2 "Soporte de FastCGI en Jetty" . Archivado del original el 24 de marzo de 2020. Recuperado el 23 de marzo de 2017 .
  13. FastCGI para Lighttpd
  14. "Extensión FastCGI para IIS6.0 – RTM" . FastCGI para IIS . Microsoft. 28 de febrero de 2008. Consultado el 29 de febrero de 2008 .
  15. "Módulo FastCGI Nginx ngx_http_fastcgi_module" . nginx.org . NGINX, Inc. Consultado el 20 de junio de 2021 .
  16. Confirmación inicial de httpd(8) de OpenBSD
  17. "Ficha técnica" . Archivado del original el 21/01/2018 . Consultado el 19/09/2016 .
  18. Bibliotecas de aplicaciones, kits de desarrollo
  19. "Matreshka" . Archivado del original el 20 de enero de 2018. Consultado el 6 de octubre de 2011 .
  20. ExtPascal
  21. Cómo usar FastCGI desde Common Lisp
  22. Goanna Eiffel
  23. jFastCGI, un servlet Java que implementa el protocolo FastCGI
  24. paquete npm node-fastcgi
  25. Existen varios módulos FastCGI para Perl: FCGI (un módulo compilado escrito en C), FCGI::Async (para aplicaciones FastCGI asíncronas), AnyEvent::FCGI (para aplicaciones basadas en AnyEvent ), FCGI::EV (paraaplicaciones basadas en EV ), CGI::Fast (interfaz similar a Perl CGI para FastCGI), FCGI::Client (una biblioteca cliente FastCGI) y Net::FastCGI (constantes y funciones para construir y analizar mensajes FastCGI).
  26. "PHP: FastCGI Process Manager (FPM) - Manual" .
  27. FasterCGI con HHVM
  28. Existen varias bibliotecas de Rust: fastcgi es una implementación de escucha y fastcgi-client es una implementación de cliente.
  29. REAL Studio Web Edition, crea aplicaciones web llamadas mediante FastCGI. Archivado el 8 de febrero de 2011 en Wayback Machine.
  • "Archivos de FastCGI.com" . Consultado el 1 de mayo de 2022 .— bifurcación/réplica del sitio web FastCGI caído
    • Mark R. Brown (29 de abril de 1996). "Especificación FastCGI" . Versión del documento 1.0. Open Market, Inc. Recuperado el 1 de mayo de 2022 .
  • "FastCGI" . Archivado del original el 20 de marzo de 2016.— Antigua página de inicio de FastCGI, tal como aparecía cuando funcionaba
  • Implementaciones
    • "mod_fcgid - Módulo de interfaz FastCGI para Apache 2 - El proyecto del servidor HTTP Apache" . Versión 2.3.9. Apache Software Foundation. 8 de octubre de 2013. Consultado el 1 de mayo de 2022 .— Implementación para Apache httpd
    • "FastCGI <fastCgi>" . Documentación de Internet Information Server . Microsoft. 6 de abril de 2022. Archivado del original el 27 de enero de 2022. Consultado el 1 de mayo de 2022 .— Implementación para Microsoft IIS
    • "Módulo Apache de esquema FastCGI proxy" . ZenProjects. 9 de octubre de 2017. Consultado el 1 de mayo de 2022 .— Implementación experimental para Apache 2.x mod_proxy