Differenze e dis / vantaggi tra: Fast-CGI, CGI, Mod-PHP, SuPHP, PHP-FPM


73

Esistono pochi "wrapper" php (?). Quali sono le differenze tra loro? Ho provato a google alcuni, ma non riesco a trovare informazioni. (mod-php non è googleable).

Perché dovrei scegliere l'uno sull'altro?

Risposte:


141

Le domande sono un po 'strane, non è chiaro se stai chiedendo solo PHP o se la tua domanda è più generale.

Ti darò una breve panoramica dal lato PHP.

Innanzitutto, i due protocolli:

  • Gli script CGI sono un modo per eseguire uno script lato server quando arriva una richiesta HTTP; questo non ha nulla a che fare con PHP

  • FastCGI è un "CGI migliore" - CGI è noto per essere lento, Fast CGI è un approccio diverso con risultati molto più veloci; questo non ha nulla a che fare con PHP.

Ora le cose relative a PHP:

  • mod_php esegue un PHP come modulo Apache - ovvero la richiesta PHP viene eseguita nel processo Apache con tutto ciò che ne consegue - I processi Apache sono definiti dalla configurazione di Apache, PHP viene eseguito con l'autorizzazione Apache ecc.

  • PHP-FPM è l'implementazione FastCGI di PHP; PHP-FPM funziona come un server FastCGI autonomo e Apache si collega al server usando il modulo di Apache, generalmente mod_fcgid o mod_fastcgi; Personalmente penso che questo sia molto meglio che funzionare come mod_php, ma dipende dalle tue esigenze ed è anche un po 'più complesso; in questa configurazione, permessi, cose relative ai processi e tutto viene eseguito sotto configurazione PHP, utente PHP ecc. & Apache si connette a PHP come a un server; in questa configurazione è anche possibile avere un pool di server PHP e avere un server PHP su una macchina fisicamente diversa da Apache. Dicono che è veloce quasi quanto l'uso del modulo Apache e ci sono vantaggi di un migliore controllo sulla configurazione di PHP.

  • SuPHP - questo era principalmente usato per affrontare alcuni problemi di mod_php relativi alle autorizzazioni; con mod_php gli script PHP vengono eseguiti sotto l'utente / gruppo Apache; mod_suphp può eseguire gli script in diversi utenti; Non l'ho mai usato, PHP-FPM ora dovrebbe essere una scelta molto migliore

Quindi in poche parole:

  • CGI, Fast-CGI sono protocolli; CGI è lento, Fast-CGI è molto più veloce
  • mod_php (con trattino basso) e PHP-FPM sono due modi di base per eseguire PHP
  • mod_SuPHP è simile a mod_php ma può cambiare l'utente / gruppo in cui viene eseguito il processo

Forse chiarirò cosa mi ha ispirato per questa domanda. Ho appena ricevuto un VPS con un pannello ISPConfig (pannello opensource per le pagine di amministrazione). Lì posso scegliere una versione di PHP per server / lato. E quelli sono elencati lì. Quindi in pratica sembra che la scelta di PHP-FPM scelga FastCGI con "wrapper" aggiuntivi?
Gacek,

12
Non so cosa utilizzi veramente il pannello ISPConfig, ma PHP funziona come PHP-FPM, che PHP avvierà il proprio server FastCGI integrato e ascolterà le richieste tramite il protocollo FastCGI. Il server HTTP riceverà richieste da Internet, gestendole come di consueto e nel caso in cui una pagina debba essere eseguita utilizzando PHP, la richiesta verrà passata al protocollo FastCGI a PHP e il risultato verrà rispedito al browser. Pensalo come un server HTTP in piedi tra il browser e il server PHP (PHP-FPM FastCGI). PHP-FPM è un'implementazione del protocollo FastCGI.
Aleš Krajník,

@ AlešKrajník grazie per questa spiegazione elaborata. Bene, ho cercato di eseguire php come utente / gruppo separato. Quindi ho iniziato con Su-exec e ho raggiunto un vicolo cieco e poi un paio di persone mi hanno consigliato php-fpm che hai spiegato. Tuttavia, sono ancora confuso sui moduli mog_cgi, mod_cgid, mod_fastcgi, mod_fcgi e su come funzionano con php-fpm. Inoltre ho letto in un altro tutorial che stavano usando mod_fcgid e mod_proxy_fcgi. Che fatica a capire come tutti i pezzi si uniscono.
David Okwii,

1
Il binario @landed PHP-FPM fa parte di ogni distribuzione PHP dalla 5.3.3 o 5.4.0 (controllare questo: php-fpm.org ), per quella specifica versione di PHP.
Aleš Krajník,

2
php-fpm è tutto sulla rimozione dei costi di inizializzazione. php-fpm pre-avvia diversi processi php, pronti a elaborare le richieste e farli dormire fino all'arrivo delle richieste, il che significa che può rispondere molto più velocemente rispetto al cgi tradizionale, poiché php è già in esecuzione quando arrivano le richieste, al contrario del CGI tradizionale, dove viene avviato un nuovo processo php per ogni richiesta, anche php-fpm non arresta il processo php dopo l'elaborazione delle richieste, ma continua a riutilizzare gli stessi processi. - con 0 overhead di avvio e arresto dei processi, php-fpm risponde molto più velocemente. l'avvio e l'arresto dei processi richiede tempo.
Hanshenrik,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.