FastCGI - FastCGI
FastCGI è un protocollo binario per interfacciare programmi interattivi con un web server . È una variazione della precedente Common Gateway Interface (CGI). L'obiettivo principale di FastCGI è ridurre l'overhead relativo all'interfacciamento tra server web e programmi CGI, consentendo a un server di gestire più richieste di pagine web per unità di tempo.
Storia
Common Gateway Interface (CGI) è un protocollo per interfacciare applicazioni esterne a server web. Le applicazioni CGI vengono eseguite in processi separati , che vengono creati all'inizio di ogni richiesta e smontati alla fine. Questo modello "un nuovo processo per richiesta" rende i programmi CGI molto semplici da implementare, ma limita l'efficienza e la scalabilità. A carichi elevati, l' overhead del sistema operativo per la creazione e la distruzione dei processi diventa significativo. Inoltre, il modello di processo CGI limita i metodi di riutilizzo delle risorse, come il riutilizzo delle connessioni al database, la memorizzazione nella cache in memoria, ecc.
Per affrontare le carenze di scalabilità della CGI, Open Market ha sviluppato FastCGI e lo ha introdotto per la prima volta nel proprio prodotto server web a metà degli anni '90. Open Market originariamente sviluppato FastCGI in parte come risposta competitiva per Netscape s' proprietaria, in-process application programming interface (API) ( Netscape Server Application Programming Interface (NSAPI)) per lo sviluppo di applicazioni Web.
Sebbene sia stato sviluppato prima da Open Market, FastCGI è stato poi implementato da molti altri produttori di server web. Tuttavia, il suo approccio era in competizione con altri metodi per velocizzare e semplificare la comunicazione server-sottoprogramma. I moduli Apache HTTP Server come mod_perl e mod_php sono apparsi nello stesso periodo e hanno guadagnato rapidamente popolarità. A partire dal 2020, tutti questi vari metodi, inclusa la CGI, rimangono di uso comune.
Dettagli di implementazione
Invece di creare un nuovo processo per ogni richiesta, FastCGI utilizza processi persistenti per gestire una serie di richieste. Questi processi sono di proprietà del server FastCGI, non del server web.
Per soddisfare una richiesta in entrata, il server Web invia le informazioni sulle variabili di ambiente e la richiesta di pagina a un processo FastCGI tramite un socket di dominio Unix , una named pipe o una connessione TCP ( Transmission Control Protocol ). Le risposte vengono restituite dal processo al server Web tramite la stessa connessione e il server Web fornisce quindi tale risposta all'utente finale . La connessione può essere chiusa alla fine di una risposta, ma i processi del server Web e del servizio FastCGI persistono.
Ogni singolo processo FastCGI può gestire molte richieste nel corso della sua vita, evitando così il sovraccarico della creazione e del termine del processo per richiesta. L'elaborazione di più richieste contemporaneamente può essere eseguita in diversi modi: utilizzando una connessione con multiplexing interno (ovvero, più richieste su una connessione); utilizzando più connessioni; o da un mix di questi metodi. È possibile configurare più server FastCGI, aumentando stabilità e scalabilità.
Gli amministratori ei programmatori di siti Web possono scoprire che separare le applicazioni Web dal server Web in FastCGI presenta molti vantaggi rispetto agli interpreti incorporati ( mod_perl , mod_php , ecc.). Questa separazione consente di riavviare i processi del server e dell'applicazione in modo indipendente, una considerazione importante per i siti Web occupati. Consente inoltre l'implementazione di policy di sicurezza del servizio di hosting per applicazione, che è un requisito importante per gli ISP e le società di web hosting. Diversi tipi di richieste in entrata possono essere distribuiti a server FastCGI specifici che sono stati attrezzati per gestire questi tipi di richieste in modo efficiente.
Server Web che implementano FastCGI
- Nota: se non diversamente specificato, la completezza dell'implementazione FastCGI è sconosciuta
-
Server HTTP Apache (parziale)
- Implementato da mod_fcgid . Questo modulo era di terze parti, ma è stato concesso a The Apache Software Foundation (ASF) come sottoprogetto Apache Server nel 2009, guidato da Chris Darroch. Supporta solo socket di dominio Unix, nessun socket TCP.
- Viene utilizzato anche un modulo di terze parti mod_fastcgi . Per un po', questo modulo non è stato più compilato correttamente sotto Apache 2.4.x, sebbene il problema sia stato risolto con un fork del progetto originale.
- Il multiplexing delle richieste attraverso una connessione è proibito dal design di Apache 1.x, quindi questo non è supportato
- In Apache 2.4 è stato aggiunto mod_proxy_fcgi , che supporta i server TCP FastCGI.
- caddy
- Cherokee
-
Hiawatha
- Supporto per il bilanciamento del carico FastCGI
- Supporta i server FastCGI chroot
- Molo
- Kerio WebSTAR
- Lighttpd
- Server Web LiteSpeed
- Microsoft IIS
- Nginx
- NaviServer
- Server Web Oracle iPlanet
- OpenBSD 's httpd (8)
- Server web mercato aperto
- Server web e applicazioni in resina
- Server web Roxen
- Server web ShimmerCat
- Zeus Web Server
Associazioni di lingua per la sua API
FastCGI può essere implementato in qualsiasi linguaggio che supporti i socket di rete . Poiché "FastCGI è un protocollo, non un'implementazione", non è strettamente legato a nessuna lingua. Le interfacce di programmazione delle applicazioni (API) esistono per:
- Ada
- Delphi , Lazzaro Free Pascal
- C , C++
- Schema di pollo
- Lispa comune
- D
- Eiffel
- Erlang
- GnuCOBOL
- andare
- Schema Guile
- Haskell
- VSI BASIC per OpenVMS
- Giava
- Lua
- nodo.js
- OCaml
- Perla
- PHP (tramite php-fpm o HipHop per PHP )
- Pitone
- Rubino
- Ruggine
- PiccoloEiffel
- Smalltalk : FasTalk e Dolphin Smalltalk
- Tcl
- WebDNA
- Vala (tramite attacchi C)
- Xojo (precedentemente Realbasic, REAL Studio)
Framework recenti come Ruby on Rails , Catalyst , Django , Kepler e Plack consentono l'uso con gli interpreti incorporati ( mod_ruby , mod_perl , mod_python o mod_lua, per esempio) o FastCGI.