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.19 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.

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
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.

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

depart() {

  # Lancement des serveurs et synthèse des résultats

  # Serveur 1

  UTILISATEUR=compte_utilisateur
  CHEMIN=/var/www/${UTILISATEUR}
  SCRIPT=php5-fastcgi

  cd "${CHEMIN}"
  su "${UTILISATEUR}" -c "nohup ${CHEMIN}/${SCRIPT} > /dev/null 2>&1 &"

  RETOUR=$?
  let RESULTAT+=RETOUR

  # Fin de lancement du serveur 1

  return $RESULTAT

}

arret() {

  # Arrêt de tous les serveurs PHP FastCGI

  if LISTE=$(ps -edf | grep '/usr/bin/php5-cgi *-b 127\.0\.0\.1:' | gawk '{ print $2 }') ; then

    RESULTAT=0

    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

    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: $0 {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

# 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)