FastCGI ist ein Binärprotokoll zur Kommunikation zwischen interaktiven Programmen und einem Webserver . Es ist eine Weiterentwicklung des früheren Common Gateway Interface (CGI). Das Hauptziel von FastCGI ist die Reduzierung des Kommunikationsaufwands zwischen Webserver und CGI-Programmen, wodurch ein Server mehr Webseitenanfragen pro Zeiteinheit verarbeiten kann.

Geschichte

Common Gateway Interface (CGI) ist eine Schnittstellenspezifikation, die es externen Anwendungen ermöglicht, mit Webservern zu interagieren. CGI-Anwendungen laufen in separaten Prozessen , die zu Beginn jeder Anfrage erstellt und am Ende wieder beendet werden. Dieses Modell „ein neuer Prozess pro Anfrage“ vereinfacht zwar die Implementierung von CGI-Programmen erheblich, schränkt aber Effizienz und Skalierbarkeit ein. Bei hoher Last wird der Overhead des Betriebssystems für die Prozesserstellung und -beendigung signifikant. Zudem beschränkt das CGI-Prozessmodell Methoden zur Ressourcennutzung, wie z. B. die Wiederverwendung von Datenbankverbindungen oder In-Memory-Caching.

Um die Skalierbarkeitsprobleme von CGI zu beheben, entwickelte Open Market FastCGI und führte es Mitte der 1990er Jahre erstmals in seinem Webserver-Produkt ein. Open Market entwickelte FastCGI ursprünglich unter anderem als Antwort auf die proprietären, prozessintegrierten Anwendungsprogrammierschnittstellen (APIs) von Netscape ( Netscape Server Application Programming Interface (NSAPI)) zur Entwicklung von Webanwendungen.

FastCGI wurde zwar ursprünglich von Open Market entwickelt, später aber von mehreren anderen Webserver-Herstellern implementiert. Sein Ansatz konkurrierte jedoch mit anderen Methoden zur Beschleunigung und Vereinfachung der Server-Subprogramm-Kommunikation. Apache HTTP Server- Module wie mod_perl und mod_php erschienen etwa zur gleichen Zeit und gewannen schnell an Popularität. Auch im Jahr 2020 waren all diese verschiedenen Methoden, einschließlich CGI, weiterhin weit verbreitet.

Details zur Implementierung

Anstatt für jede Anfrage einen neuen Prozess zu erstellen, verwendet FastCGI persistente Prozesse, um eine Reihe von Anfragen zu bearbeiten. Diese Prozesse gehören dem FastCGI-Server, nicht dem Webserver. [ 1 ]

Um eine eingehende Anfrage zu bearbeiten, sendet der Webserver Umgebungsvariableninformationen und die Seitenanfrage über einen Unix-Domain-Socket , eine Named Pipe oder eine TCP- Verbindung an einen FastCGI-Prozess. Die Antworten werden vom Prozess über dieselbe Verbindung an den Webserver zurückgesendet, der sie dann an den Endbenutzer weiterleitet . Die Verbindung kann nach dem Senden einer Antwort geschlossen werden, die Prozesse des Webservers und des FastCGI-Dienstes bleiben jedoch bestehen. [ 2 ]

Jeder einzelne FastCGI-Prozess kann während seiner Laufzeit zahlreiche Anfragen bearbeiten, wodurch der Aufwand für die Erstellung und Beendigung von Prozessen pro Anfrage entfällt. Die gleichzeitige Verarbeitung mehrerer Anfragen kann auf verschiedene Arten erfolgen: durch die Verwendung einer Verbindung mit internem Multiplexing (d. h. mehrere Anfragen über eine Verbindung), durch die Verwendung mehrerer Verbindungen oder durch eine Kombination dieser Methoden. Es können mehrere FastCGI-Server konfiguriert werden, was die Stabilität und Skalierbarkeit erhöht.

Website-Administratoren und Programmierer erkennen in der Trennung von Webanwendungen und Webserver in FastCGI viele Vorteile gegenüber eingebetteten Interpretern ( wie mod_perl oder mod_php ). Diese Trennung ermöglicht den unabhängigen Neustart von Server- und Anwendungsprozessen – ein wichtiger Aspekt für stark frequentierte Websites. Zudem erlaubt sie die Implementierung anwendungsspezifischer Sicherheitsrichtlinien des Hosting-Anbieters, was für ISPs und Webhosting-Unternehmen eine wichtige Anforderung darstellt. [ 3 ] Unterschiedliche Arten eingehender Anfragen können an spezifische FastCGI-Server verteilt werden, die für die effiziente Bearbeitung dieser Anfragentypen ausgelegt sind.

Webserver, die FastCGI implementieren

Hinweis: Sofern nicht anders angegeben, ist der Vollständigkeitsgrad der FastCGI-Implementierung unbekannt.

Sprachbindungen für die API

FastCGI kann in jeder Sprache implementiert werden, die Netzwerk-Sockets unterstützt . Da „FastCGI ein Protokoll und keine Implementierung ist“, ist es nicht an eine bestimmte Sprache gebunden. Anwendungsprogrammierschnittstellen (APIs) existieren für: [ 18 ]

Neuere Frameworks wie Ruby on Rails , Catalyst , Django , Kepler und Plack ermöglichen die Verwendung entweder mit den eingebetteten Interpretern ( z. B. mod_ruby , mod_perl , mod_python oder mod_lua) oder mit FastCGI.

Referenzen

  1. ^ „FastCGI-Spezifikation“ . Open Market, Inc. 1996. Archiviert vom Original am 19. Januar 2016.
  2. ^ „FastCGI: Eine leistungsstarke Webserver-Schnittstelle“ . Open Market, Inc. 1996. Archiviert vom Original am 1. Oktober 2010.
  3. ^ Heinlein, Paul (1. November 1998). „FastCGI: Persistente Anwendungen für Ihren Webserver“ . Linux Journal . Abgerufen am 4. Oktober 2010 .
  4. ^ FastCGI Apache-Modul mod_fcgid
  5. ^ Debian-Bug #450748: Bitte Unterstützung für TCP/IP-FastCGI-Server hinzufügen
  6. ^ Probleme mit Apache 2.4 und PHP-FPM
  7. ^ libapache-mod-fastcgi auf Github
  8. ^ „FastCGI – Der vergessene Schatz/ Abschnitt 2.3“ . Archiviert vom Original am 08.02.2010 . Abgerufen am 21.02.2006 .
  9. ^ Der FastCGI-Transport – reverse_proxy (Caddyfile-Direktive) – Caddy-Dokumentation
  10. ^ FastCGI für Cherokee
  11. ^ „FastCGI-Anleitung für Hiawatha“ . Archiviert vom Original am 11.10.2018 . Abgerufen am 27.07.2010 .
  12. ^ a b „FastCGI-Unterstützung in Jetty“ . Archiviert vom Original am 24.03.2020 . Abgerufen am 23.03.2017 .
  13. ^ FastCGI für Lighttpd
  14. ^ „FastCGI-Erweiterung für IIS 6.0 – RTM“ . FastCGI für IIS . Microsoft. 28.02.2008 . Abgerufen am 29.02.2008 .
  15. ^ „FastCGI Nginx module ngx_http_fastcgi_module“ . nginx.org . NGINX, Inc. Abgerufen am 20. Juni 2021 .
  16. ^ Erster Commit von httpd(8) für OpenBSD
  17. ^ „Technisches Datenblatt“ . Archiviert vom Original am 21.01.2018 . Abgerufen am 19.09.2016 .
  18. ^ Anwendungsbibliotheken, Entwicklungskits
  19. ^ „Matreshka“ . Archiviert vom Original am 20.01.2018 . Abgerufen am 06.10.2011 .
  20. ^ ExtPascal
  21. ^ Wie man FastCGI von Common Lisp aus verwendet
  22. ^ Goanna Eiffel
  23. ^ jFastCGI, ein Java-Servlet, das das FastCGI-Protokoll implementiert.
  24. ^ node-fastcgi npm-Paket
  25. ^ Es gibt mehrere FastCGI-Module für Perl: FCGI (ein kompiliertes Modul, geschrieben in C), FCGI::Async (für asynchrone FastCGI-Anwendungen), AnyEvent::FCGI (für AnyEvent -basierte Anwendungen), FCGI::EV (für EV -basierte Anwendungen), CGI::Fast (eine Perl- CGI -ähnliche Schnittstelle für FastCGI), FCGI::Client (eine FastCGI-Clientbibliothek) und Net::FastCGI (Konstanten und Funktionen zum Erstellen und Parsen von FastCGI-Nachrichten).
  26. ^ "PHP: FastCGI Process Manager (FPM) - Handbuch" .
  27. ^ Schnelleres CGI mit HHVM
  28. ^ Es gibt mehrere Rust-Crates: Eine Listener-Implementierung ist fastcgi , und fastcgi-client ist eine Client-Implementierung.
  29. ^ REAL Studio Web Edition erstellt Webanwendungen, die über FastCGI aufgerufen werden. Archiviert am 08.02.2011 im Internet Archive.