Fastcgi-basierter PHP-Handler
Mod_fastcgi ist ein Apache-Modul, das es Apache ermöglicht, mit fastcgi-fähigen Anwendungen zu kommunizieren. Es kann verwendet werden, um PHP-Code über fastcgi durch die php-cgi-Binärdatei auszuführen, die Fastcgi-fähig ist.
Fastcgi hat viele Verbesserungen gegenüber dem traditionellen CGI-Modell der Ausführung externer Programme innerhalb eines Webservers. Mit fastcgi werden mehrere Prozesse am Leben erhalten und jeder Prozess wird wiederverwendet, um mehrere Anfragen nacheinander zu bedienen. Es gibt Einstellungen zur Steuerung der maximalen Anzahl von Anfragen, die ein Prozess bedienen kann, nach denen der Prozess beendet und ein neuer gestartet wird.
Installieren Sie die Pakete
Als erstes müssen die notwendigen Pakete von synaptic installiert werden. Wir müssen den Apache-Server, mod_fastcgi, mpm worker und php zusammen mit der CGI-Binärdatei installieren. Beachten Sie, dass, wenn Sie bereits php mit mpm prefork und mod-php installiert haben, es bei der Installation dieser Pakete entfernt wird
$ sudo apt-get install apache2 libapache2-mod-fastcgi apache2-mpm-worker php5 php5-cgi
Unter Ubuntu befindet sich die Apache-Konfigurationsdatei unter
/etc/apache2/sites-enabled/000-default
Die PHP-CGI-Binärdatei befindet sich unter /usr/bin/php-cgi.
fastcgi konfigurieren
Nach der Installation der Pakete ist es an der Zeit, Apache so zu konfigurieren, dass er mod_fastcgi zum Ausführen von PHP-Skripten verwendet. Wie cgi führt auch fastcgi PHP-Prozesse mit der php-cgi-Binärdatei aus.
Aktivieren Sie zuerst das fastcgi-Modul mit dem Befehl a2enmod
$ sudo a2enmod fastcgi
Der Befehl a2enmod kopiert die Konfigurationsdatei des Moduls aus /etc/apache2/mods-available in das Verzeichnis /etc/apache2/mods-enabled . Die Konfigurationsdatei ist in diesem Fall fastcgi.conf. Es sieht so aus
<IfModule mod_fastcgi.c> AddHandler fastcgi-script .fcgi FastCgiIpcDir /var/lib/apache2/fastcgi </IfModule>
Mod_fastcgi registriert einen Handler namens fastcgi-script bei Apache. Dies kann verwendet werden, um anzugeben, welche Programme durch mod_fastcgi ausgeführt werden sollen.
Okay, machen wir weiter. Als nächstes muss der relevante vhost konfiguriert werden, um PHP mit dem fastcgi-Handler auszuführen. Fügen Sie die folgende Konfiguration in den gewünschten vhost-Block in der Apache-Konfigurationsdatei ein.
<Ifmodule mod_fastcgi.c> FastCgiServer /usr/local/bin/php-fastcgi-wrapper -processes 10 -restart-delay 1 -init-start-delay 1 -pass-header HTTP_AUTHORIZATION Alias /binary /usr/local/bin <Location /binary/php-fastcgi-wrapper> Options ExecCGI SetHandler fastcgi-script </Location> AddHandler php-fastcgi .php Action php-fastcgi /binary/php-fastcgi-wrapper </IfModule>
Der FastCgiServer registriert /usr/local/bin/php-fastcgi-wrapper B. die fastcgi-Anwendung mit verschiedenen Optionen.
Beachten Sie, dass dies ein Shell-Skript ist, das die php-cgi-Binärdatei mit verschiedenen Einstellungen startet. Beachten Sie, dass wir den FastCgiServer gebeten haben, 10 Prozesse zu erstellen und zu verwalten.
Die Zeile AddHandler deklariert einen neuen Handler für ".php"-Dateien namens php-fastcgi. Dies kann nach Belieben benannt werden.
Die Aktionszeile weist Apache an, die php-fastcgi-Datei mit dem CGI-Programm /cgi-bin/php-fastcgi-wrapper zu handhaben.
Jetzt ist der Speicherort /cgi-bin/php-fastcgi-wrapper kein echter. Damit es auf den tatsächlichen Speicherort des Wrapper-Skripts zeigt, wird die Alias-Direktive verwendet. Es verweist /cgi-bin auf /usr/local/bin.
Wrapper-Skript
Jetzt kommt das Wrapper-Skript, das von fastcgi verwendet wird, um php auszuführen.
#!/bin/sh # Set desired PHP_FCGI_* environment variables. # Example: # PHP FastCGI processes exit after 500 requests by default. PHP_FCGI_MAX_REQUESTS=10000 export PHP_FCGI_MAX_REQUESTS PHP_FCGI_CHILDREN=5 export PHP_FCGI_CHILDREN # Replace with the path to your FastCGI-enabled PHP executable exec /usr/bin/php-cgi
Beachten Sie die Einstellung PHP_FCGI_CHILDREN. Es gibt an, dass jeder PHP-Prozess 5 weitere untergeordnete PHP-Prozesse weiter forken und verwalten soll. So wurde früher fastcgi angewiesen, 10 Prozesse zu erstellen. Insgesamt sind das 10*5 =50 Prozesse. Es gibt 2 Ebenen des Prozessmanagements. Mod_fastcgi verwaltet 10 PHP-Prozesse und jeder PHP-Prozess verwaltet weiterhin jeweils 5 Prozesse.
Diese Datei wird unter folgendem Pfad gespeichert
/usr/local/bin/php-fastcgi-wrapper
Stellen Sie sicher, dass die Datei ausführbar ist. Führen Sie einen chmod darauf aus
/usr/local/bin# chmod +x php-fastcgi-wrapper
Der Speicherort der Datei spielt keine Rolle. Das Wrapper-Skript ist notwendig, damit verschiedene Optionen wie PHP_FCGI_MAX_REQUESTS an den PHP-Prozess weitergegeben werden können.
Starten Sie nun Apache neu und testen Sie das Setup, indem Sie ein PHP-Skript im Browser öffnen. Zeigen Sie den Inhalt der $_SERVER-Variablen in PHP an. Es sollte [FCGI_ROLE] => RESPONDER enthalten . Dies zeigt an, dass fastcgi aktiv ist.
Überprüfen Sie auch die Prozesstabelle mit htop oder System Monitor. Sie sollten 50 php-cgi-Prozesse laufen sehen.
Ressource
http://www.fastcgi.com/drupal/node/25
http://www.opensource.apple.com/source/apache_mod_php/apache_mod_php-12/php/sapi/cgi/README.FastCGI