Utiliser PHP 5 avec lighttpd
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 lighttpd 1.4.13 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 groupe du compte sous lequel vos scripts PHP doivent s'exécuter.
www-data : le nom du groupe sous lequel votre serveur lighttpd s'exécute.
site_php : le nom du répertoire dans lequel votre site est installé.
/usr/bin/php5-cgi : le chemin complet de l'interpréteur PHP utilisé. Celui-ci doit être compatible FastCGI1.
30890 : le numéro du port utilisé par lighttpd pour se connecter à PHP. C'est un numéro de port arbitraire.
Paramétrage de lighttpd
Activez le module fastcgi. Sous Débian, décommentez ou ajoutez la ligne "mod_fastcgi", de la variable server.modules du fichier /etc/lighttpd/lighttpd.conf :
server.modules = (
...
"mod_fastcgi",
...
)Ajoutez les entrées suivantes dans le paramétrage de l'hôte virtuel :
$HTTP["host"] =~ "(^|www\.)exemple\.fr\.invalid$" {
server.document-root = "/var/www/compte_utilisateur/site_php"
...
fastcgi.server = ( ".php" =>
((
"host" => "127.0.0.1",
"port" => 30890,
))
}
Création des répertoires
Le site est installé dans la hiérarchie de répertoire /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.
Créez ensuite le répertoire var-php5 qui sera utilisé pour enregistrer les informations relatives aux sessions :
mkdir -p /var/www/compte_utilisateur/var_php5
Installer PHP FastCGI
Mise en place du script
Dans /var/www/compte_utilisateur, placez le script php5-fastcgi suivant :
export PHP_FCGI_CHILDREN=2 export PHP_FCGI_MAX_REQUESTS=500 export PHPRC=/var/www/compte_utilisateur/php.ini exec /usr/bin/php5-cgi -b 127.0.0.1:30890
Ce script lance l'interpréteur PHP en mode FastCGI. Celui-ci lancera 2 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 (2 par exemple) consommera peu de ressources. Une valeur plus élevée (4 par exemple) permettra à votre site de supporter une charge plus importante.
Fichier de paramétrage PHP
Placez votre fichier php.ini dans /var/www/compte_utilisateur.
Dans le fichier php.ini, modifiez la variable session.save_path :
... session.save_path = /var/www/compte_utilisateur/var-php5 ...
Installer le script de lancement de l'interpréteur PHP
Copier le script local-php5 dans /etc/init.d :
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
UTILISATEUR=compte_utilisateur
CHEMIN=/var/www/${UTILISATEUR}
SCRIPT=php5-fastcgi
depart() {
cd "${CHEMIN}"
su "${UTILISATEUR}" -c "nohup ${CHEMIN}/${SCRIPT} > /dev/null 2>&1 &"
return $?
}
arret() {
# Recherche et arrêt des processus PHP
if LISTE=$(ps -fu "${UTILISATEUR}" | grep '/usr/bin/php5-cgi .* -b 127\.0\.0\.1:' | gawk '{ print $2 }') ; then
RESULTAT=0
# Pour chaque processus, on tue le processus s'il est encore présent
for i in ${LISTE} ; do
if ps -p $i > /dev/null 2>&1 ; then
kill $i
RETOUR=$?
let RESULTAT+=RETOUR
fi
done
return $RESULTAT
else
# Aucun script PHP trouvé
return 0
fi
}
case "$1" in
start)
echo -n "Lancement de PHP : "
depart && echo OK || echo HS
;;
stop)
echo -n "Arret de PHP : "
arret && echo OK || echo HS
;;
restart|reload|force-reload)
echo -n "Arret de PHP : "
arret && echo OK || echo HS
echo -n "Lancement de PHP : "
depart && echo OK || echo HS
;;
*)
echo "Usage: /etc/init.d/local-php {start|stop|restart|reload|force-reload)"
exit 1
;;
esac
exit 0Donner les droits d'exécution au script :
chown root:root /etc/init.d/local-php5 chmod u=rwx,go=rx /etc/init.d/local-php5
Installez le script de lancement :
/usr/sbin/update-rc.d local-php5 defaults 19
Sécurisation des répertoires
Appliquez les droits suivants :
# Répertoire de l'utilisateur chown root:groupe_de_l_utilisateur /var/www/compte_utilisateur chmod u=rwx,g=rx,o=rx /var/www/compte_utilisateur # Script de lancement chown compte_utilisateur:groupe_de_l_utilisateur /var/www/compte_utilisateur/php5-fastcgi chmod u=rwx,go= /var/www/compte_utilisateur/php5-fastcgi # Paramétrage PHP chown root:groupe_de_l_utilisateur /var/www/compte_utilisateur/php.ini chmod u=rwx,g=r,o= /var/www/compte_utilisateur/php.ini # Répertoire des sessions chown compte_utilisateur:groupe_de_l_utilisateur /var/www/compte_utilisateur/var-php5 chmod u=rwx,go= /var/www/compte_utilisateur/var-php5 # 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 PHP et lighttpd
Lancez PHP :
/etc/init.d/local-php5 start
Il ne reste plus qu'à relancer lighttpd :
/etc/init.d/lighttpd restart
Références
Le fichier README.FastCGI contenu dans les sources de PHP.
Pour le vérifier, lancez la commande php-cgi -v et vérifiez que sa sortie contient bien le texte « (cgi-fcgi) ». (1)
