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 :
-
compter_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 :
#!/bin/sh
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.
License : CC-BY