2013-06-17 13 views
12

Ich verwende diese tutorial, um nginx, php und mysql auf meinem neuen Webserver zu installieren.FastCgi vs PHP-FPM mit Nginx-Webserver

Das Tutorial verwendet ISPConfig 3 und es gibt eine Option, ob FastCgi oder PHP-FPM verwenden.

Ich frage mich, welche von beiden besser ist. In Bezug auf Leistung und Geschwindigkeit, welche der beiden ist am besten inline mit Nginx zu verwenden?

BTW, ich habe auch memcached und xcache auf meinem Server aktiviert.

Antwort

18

PHP-FPM ist viel besser als das alte FastCGI-Handling von PHP. Ab PHP 5.3.3 ist PHP-FPM im Kern und die alte FastCGI-Implementierung ist nicht mehr verfügbar.

Meine Antwort wurde nur abgelehnt (nachdem ich seit einiger Zeit online bin) und ich verstehe warum, also hier ist eine Liste, warum PHP-FPM eigentlich besser ist als die alte FastCGI-Implementierung.

Zunächst war es seit einiger Zeit bekannt, dass die FastCGI-Implementierung in der PHP-Community schlecht ist. Eine Seite, die Dokumente, die bei https://wiki.php.net/ideas/fastcgiwork gefunden werden können, wo es heißt:

php-cgi nicht sinnvoll, in der Produktionsumgebung ohne zusätzliche „Krücken“ (zum Beispiel Laich fcgi von lighttpd Verteilung oder php-fpm Patch) ist. Dieses Projekt geht von der Integration solcher "Krücken" und der Erweiterung von php-cgi zur Unterstützung verschiedener Protokolle aus.

  • daemonization (abzulösen, pid-Datei-Erstellung, Einrichtung von Umgebungsvariablen, setuid/setgid/chroot)
  • ordnungsgemäßen Start
  • getrennt und Transportschicht verbessern Unterstützung für verschiedene Protokolle
  • Unterstützung für SCGI Protokoll zu ermöglichen,
  • Unterstützung für Teilmenge von HTTP-Protokoll
  • ...

Hier ist eine Liste der Dinge, die PHP-FPM besser tut, die von http://php-fpm.org/about/ genommen wurde:

  • PHP daemonization: pid-Datei, Protokolldatei, setsid(), setuid(), setgid(), chroot()
  • Prozessmanagement. Fähigkeit, "elegant" PHP-Worker zu stoppen und zu starten, ohne irgendwelche Abfragen zu verlieren. Dies ermöglicht ein schrittweises Aktualisieren der Konfiguration und der Binärdatei, ohne dass irgendwelche Abfragen verloren gehen.
  • Einschränken von IP-Adressen, von denen Anforderungen stammen können.
  • Dynamische Anzahl der Prozesse, abhängig von der Last (adaptive Prozesslaich).
  • Starten der Arbeiter mit verschiedenen UID/GID/Chroot/Umgebung und verschiedenen php.ini Optionen (keine Notwendigkeit für den abgesicherten Modus).
  • Protokollierung STDOUT und STDERR.
  • Die Fähigkeit, alle Prozesse im Falle einer versehentlichen Zerstörung des Opcode-Cache mit gemeinsamem Speicher neu zu starten, wenn ein Beschleuniger verwendet wird.
  • Erzwingen des Abschlusses des Prozesses, wenn set_time_limit() fehlschlägt.

Weitere Features: - Fehler Kopf - Beschleunigte Upload Unterstützung - fastcgi_finish_request() - Slowlog mit Backtrace

+5

Warum ist es "besser"? – pawstrong

+2

http://php-fpm.org/about/ – Fleshgrinder

6

Eine kleine Korrektur: das PHP FastCGI SAPI ist noch verfügbar, auch auf PHP 5.5.x .

[[email protected] ~]# /usr/local/php54/bin/php-cgi -v 
PHP 5.4.17 (cgi-fcgi) (built: Jul 18 2013 05:12:07) 
Copyright (c) 1997-2013 The PHP Group 
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies 
+0

Sogar auf PHP 5.6.x gibt es noch fcgi SAPI: PHP 5.6.23 (cgi-fcgi) (gebaut: 8. Juli 2016 08:49:00). Allerdings tendiere ich immer dazu, php-fpm zu verwenden, es ist viel effizienter. – stamster

0

Auf der fastcgi Seite:

  1. Fastcgi ist leichter zu überwachen: Es gibt eine pid pro Benutzer in fastcgi. Auf einem Webserver mit vielen Konten ist es einfach, einen überladenen Prozess zu finden. Auf der anderen Seite erstellt php-fpm abhängig von den Anforderungen viele Prozesse + einen Master-Prozess. Das ist unordentlich, wenn Sie viele Verbindungen von verschiedenen IP haben.
  2. Fastcgi-Konfiguration ist einfacher: Fastcgi ist in der Apache-Konfiguration enthalten. So macht es die Dinge einfacher. Auf der anderen Seite benötigt php-fpm zusätzliche Konfigurationsdateien. Wenn es Konfigurationsabhängigkeiten gibt, macht es die Sache kompliziert.
  3. Die großen Shared-Hosting-Unternehmen verwenden immer noch nicht php-fpm im Jahr 2015 mit PHP 5.6 Heute verwenden alle größten gemeinsamen Web-Hosting-Unternehmen (bluehost, hostgator, namecheap) fastcgi, aber sie verwenden nicht php-fpm, Ich denke es gibt Gründe warum sie php-fpm nicht als PHP-Handler anbieten.

Auf der php-fpm Seite:

  1. Ich habe bemerkt, dass php-fpm 20% weniger als fastcgi verbraucht, die 20% weniger als mod_php verbraucht. Also, php-fpm ist gut für Webserver mit der kleinsten Menge an RAM.