FastCGI
Fastcgi ist ein Binärprotokoll für interaktive Programme mit a Webserver. Es ist eine Variation des früheren Gemeinsame Gateway -Schnittstelle (CGI). Das Hauptziel von FASTCGI ist es, den Overhead im Zusammenhang mit der Schnittstelle zwischen Webserver- und CGI -Programmen zu reduzieren, sodass ein Server mehr Webseitenanforderungen pro Zeiteinheit bearbeiten kann.
Geschichte
Gemeinsame Gateway -Schnittstelle (CGI) ist ein Protokoll zur Schnittstelle externer Anwendungen auf Webserver. CGI -Anwendungen werden in separat ausgeführt Prozesse, die zu Beginn jeder Anfrage erstellt und am Ende abgerissen werden. Dieses Modell "Ein neuer Prozess pro Anfrage" macht CGI -Programme sehr einfach zu implementieren, begrenzt jedoch die Effizienz und Skalierbarkeit. Bei hohen Lasten die Betriebssystem Der Aufwand für die Erstellung und Zerstörung der Prozesse wird erheblich. Außerdem begrenzt das CGI-Prozessmodell die Wiederverwendung von Ressourcenverwendung, z.
Um die Skalierbarkeitsmängel von CGI anzugehen, Offener Markt entwickelte Fastcgi und führte es Mitte der neunziger Jahre zuerst in sein Webserver-Produkt vor. Open Market wurde ursprünglich Fastcgi zum Teil als Wettbewerbsreaktion auf NetscapeEigentümer Anwendungsprogrammierschnittstellen (APIS) (Netscape Server Application Programming Interface (NSAPI)) Für die Entwicklung von Webanwendungen.
Fastcgi wurde zwar zuerst vom Open Market entwickelt, wurde dann von mehreren anderen Webserver -Herstellern implementiert. Sein Ansatz konkurrierte jedoch gegen andere Methoden, um die Server-Subprogramm-Kommunikation zu beschleunigen und zu vereinfachen. Apache HTTP Server Module wie mod_perl und mod_php erschien ungefähr zur gleichen Zeit und gewann schnell an Popularität. Ab 2020[aktualisieren]all diese verschiedenen Methoden, einschließlich CGI, werden gemeinsam verwendet.
Implementierungsdetails
Anstatt für jede Anfrage einen neuen Prozess zu erstellen, verwendet Fastcgi persistente Prozesse, um eine Reihe von Anforderungen zu bearbeiten. Diese Prozesse sind im Besitz des FastCGI -Servers, nicht dem Webserver.[1]
Um eine eingehende Anforderung zu bedienen, sendet der Webserver Umgebungsvariable Informationen und die Seitenanfrage an einen FastCGI -Prozess über beide a UNIX Domain Socket, a benannte Pfeife, oder ein Transmissionskontrollprotokoll (TCP) Verbindung. Die Antworten werden vom Prozess über dieselbe Verbindung zum Webserver zurückgegeben, und der Webserver liefert dann diese Antwort auf die Endbenutzer. Die Verbindung kann am Ende einer Antwort geschlossen werden, aber sowohl Webserver als auch FastCGI -Serviceprozesse bestehen bestehen.[2]
Jeder einzelne FastCGI-Prozess kann viele Anfragen über seine Lebensdauer abwickeln, wodurch der Overhead der Erstellung und Beendigung von Prozessprozessen pro Rangprozess vermieden wird. Die gleichzeitige Bearbeitung mehrerer Anfragen kann auf verschiedene Weise durchgeführt werden: Durch die Verwendung einer Verbindung mit interner Verbindung Multiplexing (d. H. Mehrere Anfragen über eine Verbindung); durch Verwendung mehrerer Verbindungen; oder durch eine Mischung dieser Methoden. Mehrere FastCGI -Server können konfiguriert werden, was die Stabilität und Skalierbarkeit erhöht.
Website -Administratoren und -Programmierer können feststellen, dass die Trennung von Webanwendungen vom Webserver in FastCGI viele Vorteile gegenüber eingebetteten Dolmetschern hat ((mod_perl, mod_php, etc.). Mit dieser Trennung können Server- und Anwendungsprozesse unabhängig voneinander neu gestartet werden - eine wichtige Überlegung für geschäftige Websites. Es ermöglicht auch die Implementierung von Sicherheitsrichtlinien für die Bewerbung und Hosting-Dienstleistungen, die eine wichtige Voraussetzung für ISPs und Webhosting-Unternehmen darstellen.[3] Verschiedene Arten von eingehenden Anforderungen können auf bestimmte FastCGI -Server verteilt werden, die für die effiziente Bearbeitung dieser Arten von Anforderungen ausgestattet sind.
Webserver, die FastCGI implementieren
- Hinweis: Sofern nicht angegeben, ist die Vollständigkeit der FastCGI -Implementierung unbekannt
- Apache HTTP Server (teilweise)
- Implementiert von mod_fcgid. Dieses Modul war früher Dritter, wurde aber gewährt. Die Apache Software Foundation (ASF) als Apache -Server -Unterprojekt im Jahr 2009, der von Chris Darroch gepolstert wurde.[4] Es unterstützt nur Unix -Domain -Sockets, keine TCP -Sockets.[5]
- Ein Drittanbietermodul mod_fastcgi wird auch verwendet. Für eine Weile wurde dieses Modul nicht mehr ordnungsgemäß unter Apache 2.4.x zusammengestellt.[6] Obwohl dieses Problem mit einer Gabel des ursprünglichen Projekts gelöst wurde.[7]
- Die Multiplexierung von Anforderungen über eine Verbindung ist durch Apache 1.x Design,[8] Das wird also nicht unterstützt
- In Apache 2.4, mod_proxy_fcgi wurde hinzugefügt, was TCP -Fastcgi -Server unterstützt.
- Caddie[9]
- Cherokee[10]
- Hiawatha[11]
- Loadbalancing Fastcgi -Unterstützung
- Unterstützt Chooted Fastcgi -Server
- Steg[12]
- Kerio Webstar
- LightTpd[13]
- Leenspeed Web Server
- Microsoft IIS[14]
- Nginx[15]
- Naviserver
- Oracle Iplanet Webserver
- OpenBSD's httpd (8)[16]
- Offener Markt Webserver
- Harz Web- und Anwendungsserver
- Roxen Webserver
- Shimmercat Webserver[17]
- Zeus Webserver
Sprachbindungen für seine API
Fastcgi kann in jeder Sprache implementiert werden, die unterstützt Netzwerkstücken. Da "Fastcgi ein Protokoll ist, keine Implementierung", ist es nicht fest an eine Sprache gebunden. Anwendungsprogrammierschnittstellen (Apis) existieren für:[18]
- Ada[19]
- Delphi, Lazarus Kostenloser Pascal[20]
- C, C ++
- Huhn Planen
- Common Lisp[21]
- D
- Eiffel[22]
- Erlang
- Gnucobol
- gehen
- List Planen
- Haskell
- Vsi grundlegend für openVMs
- Java[23][12]
- Lua
- node.js[24]
- Ocaml
- Perl[25]
- Php (über Php-FPM,[26] oder HipHop für PHP[27])
- Python
- Rubin
- Rost[28]
- Smalleiffel
- Smalltalk: Fastalk und Dolphin Smalltalk
- Tcl
- WebDNA
- Vala (über C -Bindungen)
- Xojo (ehemals realBasic, Real Studio)[29]
Jüngste Frameworks wie z. Rubin auf Schienen, Katalysator, Django, Kepler und Plack Verwenden Sie die Verwendung mit entweder mit den eingebetteten Dolmetschern (mod_ruby, mod_perl, mod_python oder mod_lua zum Beispiel) oder fastcgi.
Verweise
- ^ "Fastcgi -Spezifikation". Open Market, Inc.. 1996. archiviert von das Original am 19. Januar 2016.
- ^ "FastCGI: Eine Hochleistungs-Webserverschnittstelle". Open Market, Inc.. 1996. archiviert von das Original am 1. Oktober 2010.
- ^ Heinlein, Paul (1. November 1998). "FASTCGI: Persistente Anwendungen für Ihren Webserver". Linux Journal. Abgerufen 4. Oktober 2010.
- ^ FASTCGI APache Modul mod_fcgid
- ^ Debian Bug #450748: Bitte fügen Sie Unterstützung für TCP/IP -Fastcgi -Server hinzu
- ^ Probleme mit Apache 2.4 und PHP-FPM
- ^ libapache-mod-fastcgi auf GitHub
- ^ "Fastcgi - Der vergessene Schatz/ Abschnitt 2.3". Archiviert von das Original Am 2010-02-08. Abgerufen 2006-02-21.
- ^ Caddy -Benutzerhandbuch - Fastcgi
- ^ Fastcgi für Cherokee
- ^ Fastcgi Howto für Hiawatha
- ^ a b Fastcgi -Unterstützung im Stegy
- ^ Fastcgi für LightTPD
- ^ "Fastcgi -Erweiterung für IIS6.0 - RTM". Fastcgi für IIS. Microsoft. 2008-02-28. Abgerufen 2008-02-29.
- ^ "FASTCGI NGINX MODUL NGX_HTTP_FASTCGI_MODULE". nginx.org. Nginx, Inc. Abgerufen 20. Juni 2021.
- ^ OpenBSDs HTTPD (8) Erstes Commit
- ^ "Archivierte Kopie". Archiviert von das Original Am 2018-01-21. Abgerufen 2016-09-19.
{{}}
: CS1 Wartung: Archiviertes Kopie als Titel (Link) - ^ Anwendungsbibliotheken, Entwicklungskits
- ^ Matreshka
- ^ Extpascal
- ^ Wie man Fastcgi von Common Lisp verwendet
- ^ Goanna Eiffel
- ^ Jastcgi, ein Java -Servlet, das das Fastcgi -Protokoll implementiert
- ^ Node-Spastcgi NPM-Paket
- ^ Es gibt mehrere Fastcgi -Module für Perl:Fcgi (Ein kompiliertes Modul in c),FCGI :: Async (für asynchrone Fastcgi -Anwendungen),Anyevent :: FCGI (zum Jedes Ereignis-basierte Anwendungen),Fcgi :: ev (zum Ev-basierte Anwendungen),CGI :: Schnell (Perl CGI-ähnliche Schnittstelle für Fastcgi),FCGI :: Client (eine Fastcgi -Client -Bibliothek) und NET :: FASTCGI (Konstanten und Funktionen zum Erstellen und Analysieren von Fastcgi -Nachrichten).
- ^ "PHP: FastCGI Process Manager (FPM) - Handbuch".
- ^ Fastercgi mit HHVM
- ^ Es gibt mehrere Rostkisten: Eine Implementierung von Hörern ist Fastcgi, und Fastcgise ist eine Client -Implementierung.
- ^ Real Studio Web Edition, baut Web -Apps, die über Fastcgi bezeichnet werden Archiviert 2011-02-08 bei der Wayback -Maschine
Externe Links
- "Fastcgi.com Archive". Abgerufen 2022-05-01. - Fork/Mirror der alten Fastcgi -Website
- Mark R. Brown (29. April 1996). "Fastcgi -Spezifikation". Dokumentversion 1.0. Open Market, Inc.. Abgerufen 2022-05-01.
- "Fastcgi". Archiviert von das Original am 2016-03-20. - Alte Fastcgi -Homepage, wie es beim Arbeiten erschien
- Implementierungen
- "Mod_fcgid - FASTCGI -Schnittstellenmodul für Apache 2 - Das Apache HTTP Server -Projekt". Version 2.3.9. Apache Software Foundation. 2013-10-08. Abgerufen 2022-05-01. - Implementierung für Apache HTTPD
- "Fastcgi <fastcgi>". Internet Information Server -Dokumentation. Microsoft. 2022-04-06. Archiviert vom Original am 2022-01-27. Abgerufen 2022-05-01. - Implementierung für Microsoft IIS
- "Proxy FastCGI -Schema Apache -Modul". Zenprojekte. 2017-10-09. Abgerufen 2022-05-01. - Experimentelle Implementierung für Apache 2.x mod_proxy