Mod Fcgid
Mod Fcgid ist ein Apache-Modul, das es ermöglicht, mit fastcgi-fähigen Anwendungen zu kommunizieren. Es kann verwendet werden, um mit Apache einzurichten, um PHP über fastcgi auszuführen. Es ist eine Alternative zum älteren mod_fastcgi und weist einige Unterschiede zu diesem auf.
In diesem Beitrag werden wir Apache mit PHP unter Verwendung dieses Moduls einrichten. Sie können Apache + PHP auch mit mod_fastcgi einrichten.
Da fastcgi die PHP-Ausführung von Apache fernhält, steht es uns frei, ein threadbasiertes mpm wie mpm worker zu verwenden.
Installieren
Für die Einrichtung benötigen wir Apache, PHP (mit CGI Binary), mod_fcgid, mpm worker. Installieren Sie sie direkt von der Befehlszeile aus.
# sudo apt-get install apache2 libapache2-mod-fcgid apache2-mpm-worker php5 php5-cgi
Aktivieren Sie mod_fcgid
# sudo a2enmod fcgid
Konfigurationsdateien suchen
Nach der Installation der erforderlichen Pakete ist es an der Zeit, mod_fcgid zu konfigurieren. Die Konfiguration erfolgt meist über verschiedene Konfigurationsdateien. Daher ist es wichtig zu wissen, wo sich die Konfigurationsdateien befinden.
Die Apache-Konfigurationsdatei auf Ubuntu/Debian befindet sich unter folgendem Pfad
/etc/apache2/sites-available/default
Um den Speicherort der Apache-Konfigurationsdatei für Ihre Distribution herauszufinden, verwenden Sie den Befehl apache2/httpd/apachectl.
# apachectl -S apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName VirtualHost configuration: wildcard NameVirtualHosts and _default_ servers: *:80 is a NameVirtualHost default server 127.0.1.1 (/etc/apache2/sites-enabled/000-default:1) port 80 namevhost 127.0.1.1 (/etc/apache2/sites-enabled/000-default:1) Syntax OK
Die Konfigurationsdatei befindet sich also unter /etc/apache2/sites-enabled/000-default .
Fcgid konfigurieren
Apache muss so konfiguriert werden, dass er mod_fcgid verwendet, um alle ".php"-Dateien zu verarbeiten, und mod_fcgid muss der Speicherort der PHP-Fastcgi-Binärdatei mitgeteilt werden, die php-cgi unter
ist/usr/bin/php-cgi
Fügen Sie die folgende Konfiguration zum Stammverzeichnisabschnitt im vhost-Block
hinzu<Ifmodule mod_fcgid.c> # FCGID registers a handler named fcgid-script AddHandler fcgid-script .php Options +ExecCGI FcgidWrapper /usr/local/bin/php-fcgid-wrapper </IfModule>
Dies weist Apache an, das Wrapper-Skript zu verwenden, um den Fastcgi-Prozess php-cgi zu starten. Außerdem weist es Apache an, .php-Dateien mit dem fcgid-Handler auszuführen.
Um die fcgid-Einstellungen wie die maximale Anzahl von Prozessen zu steuern, fügen Sie die relevanten Einstellungen außerhalb des vhost-Blocks hinzu.
<Ifmodule mod_fcgid.c> # Context - server config FcgidMaxProcesses 150 # Otherwise php output shall be buffered FcgidOutputBufferSize 0 </IfModule>
Diese Einstellungen gelten für den Serverkontext und müssen sich daher außerhalb eines Vhost-Blocks befinden.
Wrapper-Skript
Nun das Wrapper-Skript, das von mod_fcgid verwendet wird, um php-cgi-Prozesse zu starten.
#!/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 # Replace with the path to your FastCGI-enabled PHP executable exec /usr/bin/php-cgi
Wir speichern das Wrapper-Skript unter /usr/local/bin/php-fcgid-wrapper aber es kann überall gespeichert werden und der Pfad muss in der Apache-Konfiguration angegeben werden.
Machen Sie das Wrapper-Skript mit chmod
ausführbar/usr/local/bin# chmod +x php-fcgid-wrapper
Andernfalls erhalten Sie einen Fehler in Ihrem Apache-Protokoll wie diesen
[Tue Jun 11 02:53:20 2013] [warn] [client 127.0.0.1] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server [Tue Jun 11 02:53:20 2013] [error] [client 127.0.0.1] Premature end of script headers: server.php
Stellen Sie außerdem sicher, dass Sie nicht die Einstellung „PHP_FCGI_CHILDREN“ verwenden. Die php-cgi-Binärdatei kann mehrere untergeordnete Prozesse auslagern und verwalten, aber fcgid wird nicht mehr als eine einzelne Anfrage gleichzeitig an die php-cgi-Binärdatei weiterleiten, daher werden die untergeordneten Prozesse nicht verwendet. Dies wird in der Dokumentation erklärt
PHP child process management (PHP_FCGI_CHILDREN) should always be disabled with mod_fcgid, which will only route one request at a time to application processes it has spawned; thus, any child processes created by PHP will not be used effectively. (Additionally, the PHP child processes may not be terminated properly.) By default, and with the environment variable setting PHP_FCGI_CHILDREN=0, PHP child process management is disabled. The popular APC opcode cache for PHP cannot share a cache between PHP FastCGI processes unless PHP manages the child processes. Thus, the effectiveness of the cache is limited with mod_fcgid; concurrent PHP requests will use different opcode caches.
Außerdem können Sie APC nicht mit fcgid verwenden.