Utiliser PHP avec fcgid & suexec sous Apache 2.2
Synthèse
Cette page reprend un paramétrage fonctionnel, pouvant servir de point de départ au paramétrage d'un site. Il a été validé sous Apache 2.2 sur une distribution Débian.
Procédure d'installation
Adaptation à votre site
Vous devrez remplacer toutes les valeurs suivantes par des valeurs pertinentes pour votre site :
compte_utilisateur : le nom du compte utilisateur sous lequel vos scripts PHP doivent s'exécuter.
groupe_de_l_utilisateur : le nom du goupe du compte sous lequel vos scripts PHP doivent s'exécuter.
www-data : le nom du groupe sous lequel votre serveur Apache s'exécute.
site_php : le nom du répertoire dans lequel votre site est installé.
/usr/bin/php-cgi : le chemin complet de l'interpréteur PHP1 utilisé. Celui-ci doit être compatible FastCGI2.
Paramétrage d'Apache 2
Activez les modules fcgid et suexec. Sous Débian, exécutez les commandes suivantes :
a2enmod suexec a2enmod fcgid
Ajoutez les entrées suivantes dans le paramétrage de l'hôte virtuel :
<VirtualHost *> DocumentRoot /var/www/compte_utilisateur/site_php [...] Options None SuexecUserGroup compte_utilisateur groupe_de_l_utilisateur <Directory /var/www/compte_utilisateur/site_php> # On exécute les scripts .php de ce répertoire # via le script intermédiaire php-cgi AddHandler fcgid-script .php FCGIWrapper /var/www/compte_utilisateur/php-cgi .php Options ExecCGI </Directory> # On lance un seul serveur PHP FastCGI # qui lancera autant de fils que # nécessaire DefaultMaxClassProcessCount 1 DefaultMinClassProcessCount 1 </VirtualHost>
Puis vérifiez la syntaxe de votre paramétrage d'Apache :
apache2ctl -t
Création des répertoires
À moins d'utiliser le module Apache mod_userdir, vous devrez travailler dans la hiérarchie de répertoires /var/www :
Commencez par créer les répertoires devant héberger votre site :
mkdir -p /var/www/compte_utilisateur/site_php
Puis recopiez votre site dans le répertoire site_php.
Script intermédiaire
Dans /var/www/compte_utilisateur, placez le script php-cgi suivant :
export PHP_FCGI_CHILDREN=4 export PHP_FCGI_MAX_REQUESTS=500 exec /usr/bin/php-cgi $@
Lorsque ce script sera exécuté par Apache, il sera dynamiquement remplacé par le serveur php-cgi. Celui-ci lancera 4 processus fils, chacun en charge de traiter les requêtes reçues. Lorsqu'un processus fils donné aura traité 500 requêtes, il se terminera automatiquement et sera relancé par le processus père. Ce mécanisme est conçu pour éviter d'être trop pénalisé par une éventuelle fuite mémoire.
Le nombre de fils (PHP_FCGI_CHILDREN) est à adapter, en fonction de la puissance de la machine et de la fréquentation du site. Donner à cette variable une valeur faible (4 par exemple) consommera peu de ressources. Une valeur plus élevée (8 par exemple) permettra à votre site de supporter une charge plus importante.
Sécurisation des répertoires
Appliquez les droits suivants :
# Répertoire de l'utilisateur chown compte_utilisateur:groupe_de_l_utilisateur /var/www/compte_utilisateur chmod u=rwx,g=rx,o=rx /var/www/compte_utilisateur # Script intermédiaire chown compte_utilisateur:groupe_de_l_utilisateur /var/www/compte_utilisateur/php-cgi chmod u=rwx,ug= /var/www/compte_utilisateur/php-cgi # Site chown compte_utilisateur:www-data /var/www/compte_utilisateur/site_php chmod -R u=rwX,g=rX,o= /var/www/compte_utilisateur/site_php
Relancez Apache
Il ne reste plus qu'à relancer Apache :
apache2ctl graceful
Références
La documentation de SUEXEC sur le site du projet Apache.
Le fichier README.FastCGI contenu dans les sources de PHP.

