Mod Fcgid
Mod Fcgid est un module apache qui lui permet de parler à une application compatible fastcgi. Il peut être utilisé pour configurer avec apache pour exécuter php sur fastcgi. C'est une alternative à l'ancien mod_fastcgi et présente quelques différences avec lui.
Dans cet article, nous allons configurer apache avec php en utilisant ce module. Vous pouvez également configurer apache + php avec mod_fastcgi.
Étant donné que fastcgi empêche l'exécution de php d'apache, nous sommes libres d'utiliser un mpm basé sur des threads comme mpm worker.
Installer
Pour la configuration, nous avons besoin d'apache, php (avec le binaire cgi), mod_fcgid, mpm worker. Installez-les directement depuis la ligne de commande.
# sudo apt-get install apache2 libapache2-mod-fcgid apache2-mpm-worker php5 php5-cgi
Activer mod_fcgid
# sudo a2enmod fcgid
Rechercher les fichiers de configuration
Après avoir installé les packages nécessaires, il est temps de configurer mod_fcgid. La configuration se fait principalement via divers fichiers de configuration. Il est donc important de savoir où se trouvent les fichiers de configuration.
Le fichier de configuration apache sur ubuntu/debian se trouve au chemin suivant
/etc/apache2/sites-available/default
Pour connaître l'emplacement du fichier de configuration apache pour votre distribution, utilisez la commande 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
Le fichier de configuration se trouve donc dans /etc/apache2/sites-enabled/000-default .
Configurer Fcgid
Apache doit être configuré pour utiliser mod_fcgid pour traiter tous les fichiers ".php" et mod_fcgid doit être informé de l'emplacement du binaire php fastcgi, qui est php-cgi situé à
/usr/bin/php-cgi
Ajoutez la configuration suivante à la section du répertoire racine dans le bloc vhost
<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>
Cela indique à apache d'utiliser le script wrapper pour lancer le processus fastcgi php-cgi. Il indique également à apache d'exécuter les fichiers .php à l'aide du gestionnaire fcgid.
Pour contrôler les paramètres fcgid comme le nombre maximum de processus, ajoutez les paramètres pertinents en dehors du bloc vhost.
<Ifmodule mod_fcgid.c> # Context - server config FcgidMaxProcesses 150 # Otherwise php output shall be buffered FcgidOutputBufferSize 0 </IfModule>
Ces paramètres s'appliquent au contexte du serveur et doivent donc être en dehors de tout bloc Vhost.
Script d'encapsulation
Maintenant, le script wrapper utilisé par mod_fcgid pour lancer les processus php-cgi.
#!/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
Nous stockons le script wrapper dans /usr/local/bin/php-fcgid-wrapper mais il peut être stocké n'importe où et le chemin doit être mentionné dans la configuration apache.
Rendre le script wrapper exécutable à l'aide de chmod
/usr/local/bin# chmod +x php-fcgid-wrapper
Sinon, vous obtenez une erreur dans votre journal apache comme celle-ci
[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
Assurez-vous également de ne pas utiliser le paramètre "PHP_FCGI_CHILDREN". Le binaire php-cgi peut générer plusieurs processus enfants et les gérer, mais fcgid ne transmettra pas plus d'une requête au binaire php-cgi à la fois, par conséquent, les processus enfants ne seront pas utilisés. Ceci est expliqué dans la documentation
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.
Vous ne pouvez pas non plus utiliser APC avec fcgid.