Różnice i wady / zalety między: Fast-CGI, CGI, Mod-PHP, SuPHP, PHP-FPM

73

Istnieje kilka różnych „wrapperów” php (?). Jakie są między nimi różnice? Próbowałem trochę google, ale wydaje się, że nie mogę znaleźć informacji. (mod-php nie jest googleable).

Dlaczego mogę wybierać między sobą?

Gacek
źródło

Odpowiedzi:

141

Pytania są trochę dziwne, nie jest jasne, czy pytasz tylko o PHP, czy twoje pytanie jest bardziej ogólne.

Dam ci krótki przegląd od strony PHP.

Po pierwsze, dwa protokoły:

  • Skrypty CGI to sposób na uruchomienie skryptu po stronie serwera, gdy nadejdzie żądanie HTTP; nie ma to nic wspólnego z PHP

  • FastCGI jest „lepszym CGI” - wiadomo, że CGI jest powolny, szybki CGI jest innym podejściem ze znacznie szybszymi wynikami; nie ma to również nic wspólnego z PHP.

Teraz rzeczy związane z PHP:

  • mod_php uruchamia PHP jako moduł Apache - to znaczy żądanie PHP jest uruchamiane w ramach procesu Apache ze wszystkim, co się z nim wiąże - procesy Apache są definiowane przez konfigurację Apache, PHP jest uruchamiane za zgodą Apache itp.

  • PHP-FPM to implementacja PHP FastCGI; PHP-FPM działa jako samodzielny serwer FastCGI, a Apache łączy się z serwerem za pomocą modułu Apache, zwykle mod_fcgid lub mod_fastcgi; Osobiście uważam, że jest to znacznie lepsze niż uruchamianie jako mod_php, ale zależy to od twoich wymagań i jest nieco bardziej złożone; w tej konfiguracji pozwolenie, procesy związane z procesami i wszystko jest uruchamiane w konfiguracji PHP, użytkownik PHP itp. Apache łączy się z PHP jak z serwerem; w tej konfiguracji możliwe jest także posiadanie puli serwerów PHP i serwer PHP na fizycznie innym komputerze niż Apache. Mówią, że jest to prawie tak szybkie, jak w przypadku korzystania z modułu Apache i istnieją zalety lepszej kontroli nad konfiguracją PHP.

  • SuPHP - był używany głównie do rozwiązania niektórych problemów mod_php związanych z uprawnieniami; z mod_php skrypty PHP są uruchamiane pod użytkownikiem / grupą Apache; mod_suphp może uruchamiać skrypty u różnych użytkowników; Nigdy go nie użyłem, PHP-FPM powinien być teraz znacznie lepszym wyborem

Zasadniczo:

  • CGI, Fast-CGI to protokoły; CGI jest wolny, szybki CGI jest znacznie szybszy
  • mod_php (z podkreśleniem) i PHP-FPM to dwa podstawowe sposoby uruchamiania PHP
  • mod_SuPHP jest podobny do mod_php, ale może zmienić użytkownika / grupę, w której działa proces
Aleš Krajník
źródło
Może wyjaśnię, co zainspirowało mnie do tego pytania. Właśnie dostałem VPS z panelem ISPConfig (panel opensource do stron administracyjnych). Tam mogę wybrać wersję PHP dla serwera / strony. A te są tam wymienione. Więc w zasadzie wydaje się, że wybranie PHP-FPM wybiera FastCGI z dodatkowymi „wrapperami”?
Gacek,
12
Nie wiem, czego tak naprawdę używa panel ISPConfig, ale PHP działa jako PHP-FPM, że PHP uruchomi swój własny wbudowany serwer FastCGI i będzie nasłuchiwał żądań za pośrednictwem protokołu FastCGI. Serwer HTTP będzie odbierał żądania z Internetu, przetwarzając je jak zwykle, aw przypadku konieczności uruchomienia strony przy użyciu PHP, żądanie zostanie przekazane do PHP przez protokół FastCGI, a wynik zostanie odesłany z powrotem do przeglądarki. Pomyśl o tym jako o serwerze HTTP stojącym między przeglądarką a serwerem PHP (PHP-FPM FastCGI). PHP-FPM to implementacja protokołu FastCGI.
Aleš Krajník
@ AlešKrajník dziękuje za to skomplikowane wyjaśnienie. Próbowałem uruchomić php jako oddzielny użytkownik / grupa. Więc zacząłem od Su-exec i trafiłem w ślepy zaułek, a potem kilka osób poleciło php-fpm, które wyjaśniłeś. Jednak nadal jestem zdezorientowany co do modułów mog_cgi, mod_cgid, mod_fastcgi, mod_fcgi i ich działania z php-fpm. Przeczytałem również w innym samouczku, w którym używali mod_fcgid i mod_proxy_fcgi. Jak trudno jest zrozumieć, jak wszystkie elementy się łączą.
David Okwii,
1
Plik binarny @landed PHP-FPM jest częścią każdej dystrybucji PHP od 5.3.3 lub 5.4.0 (sprawdź to: php-fpm.org ), dla tej konkretnej wersji PHP.
Aleš Krajník
2
php-fpm polega na usuwaniu kosztów inicjalizacji. php-fpm wstępnie uruchamia kilka procesów php, jest gotowych do przetworzenia żądań i pozwala im je uśpić do momentu pojawienia się żądań - co oznacza, że ​​może odpowiedzieć znacznie szybciej niż tradycyjne cgi, ponieważ php już działa, gdy przychodzą żądania, w przeciwieństwie do tradycyjnych CGI, gdzie dla każdego żądania uruchamiany jest nowy proces php, również php-fpm nie zamyka procesu php po przetworzeniu żądań, ale używa tych samych procesów ponownie. - przy zerowym obciążeniu uruchamiania i zatrzymywania procesów php-fpm reaguje znacznie szybciej. uruchamianie i zatrzymywanie procesów wymaga czasu.
hanshenrik