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 :

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 0

Donner 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


  1. Pour le vérifier, lancez la commande php-cgi -v et vérifiez que sa sortie contient bien le texte « (cgi-fcgi) ». (1)

Utiliser PHP avec lighttpd (last edited 2008-06-01 10:46:15 by JeanPhilippeGuérard)