Installer Lighttpd et PHP 5 sur Debian 4.0 Etch et 5.0 Lenny
Lighttpd est un serveur Web très léger et très simple à configurer. C'est une alternative intéressante à Apache lorsque vous souhaitez disposer d'une installation légère. Ce guide vous explique comment installer Lighttpd avec support du PHP 5.
Administration simplifiée
J'ai écrit un script pour simplifier l'installation et l'administration de LigHTTPd. Les guides présents sur ce site utilisent intensivement cet outil. Mettez en place lighty-tools :
command wget "http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-lighttpd-et-php-sur-debian-4-0-etch/lighty-tools" \ --output-document="/usr/bin/lighty-tools" command chmod +x "/usr/bin/lighty-tools"
Installation de Lighttpd
Installez le serveur LigHTTPd à l'aide de lighty-tools :
command lighty-tools setup-lighttpd
Mise en place de PHP 5
Pour disposer du support PHP 5 dans LigHTTPd, lancez :
command lighty-tools enable-php5
Si vos applications PHP le supportent, il est très intéressant d'activer le support d'X-Sendfile. Ce header permet aux applications Web de déléguer le téléchargement de fichiers au serveur HTTP. Si cette fonctionnalité vous intéresse, lancez :
command lighty-tools enable-x-send-file
Sécurisation de Lighttpd grâce à fail2ban
fail2ban est un outil qui surveille vos journaux d'erreurs. Il bannit automatiquement les adresses IP à l'origine d'attaques (Déni de Service, tentative de récupération de mot de passe par force brute, etc...). Pour faire en sorte que fail2ban protège votre serveur LigHTTPd, lancez :
command lighty-tools setup-fail2ban
Administration quotidienne
Pour mettre en place un hôte virtuel servant un dossier, utilisez cette commande (adaptez les valeurs graissées à vos besoins):
command lighty-tools add-virtual-host "www.mon-domaine-exemple.com" "/opt/mon-dossier"
Pour mettre en place un hôte virtuel redirigeant vers un autre site, utilisez cette commande (adaptez les valeurs graissées à vos besoins):
command lighty-tools add-redirect "www.mon-domaine-exemple.com" "http://www.domaine-cible.com/"
Installation (sans lighty-tools)
Nous commençons par installer les paquets nécessaires :
command apt-get install lighttpd libterm-readline-gnu-perl php5-cgi
Par défaut, sur Debian 4.0 Etch, Lighttpd fourni une configuration par défaut utilisant php4-cgi. Dans le cas ou vous utilisez cette distribution, appliquez le patch nécessaire :
if [ -n "$(/bin/grep '/usr/bin/php4-cgi' /etc/lighttpd/conf-available/10-fastcgi.conf)" ]; then command cp "/etc/lighttpd/conf-available/10-fastcgi.conf" "/etc/lighttpd/conf-available/10-fastcgi-php5.conf" command sed -i -e 's/php4/php/g' "/etc/lighttpd/conf-available/10-fastcgi-php5.conf" fi
Activez la configuration adéquate suivant que nous utilisons Debian 4.0 Etch ou Debian 5.0 Lenny :
if [ -e "/etc/lighttpd/conf-available/10-fastcgi-php5.conf" ]; then command lighty-enable-mod fastcgi-php5 elif [ -e "/etc/lighttpd/conf-available/10-fastcgi-php.conf" ]; then command lighty-enable-mod fastcgi-php elif [ -e "/etc/lighttpd/conf-available/15-fastcgi-php.conf" ]; then command lighty-enable-mod fastcgi command lighty-enable-mod fastcgi-php else command lighty-enable-mod fastcgi fi
Et rechargez la configuration de lighttpd :
/etc/init.d/lighttpd force-reload
Pour aller plus loin (sans lighty-tools)
Amélioration des performances de PHP
Si vous le souhaitez, vous pouvez installer un accélérateur PHP en suivant mon guide Installer XCache sur Debian 4.0 Etch.
Accélérer le téléchargement des fichiers avec X-Sendfile
Si vos applications PHP le supportent, il est très intéressant d'activer le support d'X-Sendfile. Ce header permet aux applications Web de déléger le téléchargement de fichiers au serveur HTTP. Pour activer cet outil, utilisez cette ligne de commande :
/bin/sed -i -e '/bin-path/a\ \t\t"allow-x-send-file" => "enable",' \ /etc/lighttpd/conf-available/10-fastcgi*.conf
Désactiver l'affichage du contenu des dossiers
Par défaut, Lighttpd affiche le contenu des dossiers lors qu'aucun fichier index n'est présent. Cela n'est pas une faille de sécurité en soit, mais facilite la récupération des fichiers présents sur le serveur, même lorsque cela n'est pas souhaitable. Si vous souhaitez désactiver cette possibilité de naviguer dans le contenu des dossiers, il vous faut en premier lieu créer le fichier de configuration adéquat :
/bin/echo '## directory listing configuration ## we disable the directory listing by default ## $HTTP["url"] =~ "^/" { dir-listing.activate = "disable" }' | /usr/bin/tee /etc/lighttpd/conf-available/20-disable-listing.conf
Activez ensuite cette nouvelle configuration :
/usr/sbin/lighty-enable-mod disable-listing
Et rechargez la configuration de lighttpd :
/etc/init.d/lighttpd force-reload
Mise en place d'un hôte virtuel avec Lighttpd
Lighttpd, tout comme son cousin Apache sait gérer simplement plusieurs sites Internet sur un même serveur. Voici comment mettre en place rapidement un hôte virtuel proposant un dossier.
En premier lieu, renseignez le nom de domaine de votre hôte virtuel (remplacez la valeur en gras):
SITE_HOSTNAME=www.mon-domaine.fr
Maintenant, renseignez le dossier que vous souhaitez voir assigné à ce domaine (remplacez la valeur en gras):
SITE_PATH=/var/www/www.mon-domaine.fr/
Une fois ceci-fait, téléchargez le modèle de configuration de votre hôte virtuel:
SITE_CONF=$(/bin/echo ${SITE_HOSTNAME} | /bin/sed -e 's/\./-/g') /usr/bin/wget http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-lighttpd-et-php-sur-debian-4-0-etch/lighttpd-vhost.conf \ --output-document=/etc/lighttpd/conf-available/20-${SITE_CONF}.conf
Et appliquez vos paramètres à ce modèle:
/bin/sed -i -e "s/SITE_HOSTNAME/${SITE_HOSTNAME}/g" \ -e "s|SITE_PATH|${SITE_PATH}|g" \ /etc/lighttpd/conf-available/20-${SITE_CONF}.conf
Activez la configuration ainsi mise en place:
/usr/sbin/lighty-enable-mod ${SITE_CONF}
Testez la configuration ainsi mise en place:
/usr/sbin/lighttpd -t -f /etc/lighttpd/lighttpd.conf
Et si vous ne rencontrez aucune erreur, rechargez la configuration de Lighttpd :
/etc/init.d/lighttpd force-reload
Vous devriez maintenant pouvoir accéder à votre site Internet.
Remarque : L'utilisation d'hôte virtuels Lighttpd est utile, même si vous utilisez Lighttpd derrière un Reverse Proxy Apache 2. Si vous en doutez, intéressez vous à la directive ProxyPreserveHost du mod_proxy Apache.
URL Rewriting avec Lighttpd
Contrairement à Apache 2, Lighttpd n'est pas capable de faire des réécritures complexes des URLs. Cependant, il existe un moyen très simple de mettre en place de l'URL rewriting pour certaines applications Web, dont Wordpress et les applications Symfony. Il suffit de spécifier que le fichier "index.php" de ces applications Web est chargé de gérer les erreurs 404.
Pour ce faire, ajoutez simplement la ligne suivante dans le fichier de configuration de l'hôte virtuel hébergeant votre application, et adaptez le chemin vers le fichier index.php pour qu'il corresponde à votre application:
server.error-handler-404 = "/index.php"
Mise en place du protocole HTTPS
Afin de mettre en place le HTTPS, il vous faut en premier lieu créer un certificat SSL. Pour ce faire, je vous conseille de suivre mon guide:
Créer un certificat SSL multi-domaines
Remarque: Afin de ne pas avoir à recréer un certificat SSL à chaque fois que vous ajoutez un sous-domaine, je vous conseille de créer votre certificat SSL avec un Joker. Par exemple, j'ai moi-même créé mon certificat SSL pour être valide pour les domaines suivants:
- landure.fr
- *.landure.fr
- landure.com
- *.landure.com
- etc...
Une fois le certificat SSL créé, nous le plaçons dans le dossier de la configuration Lighttpd, et nous le regroupons en un seul fichier, afin de le retrouver simplement:
/bin/cp /etc/openssl/PRIVATE_KEYS/https_key.pem /etc/lighttpd/server.pem /bin/cat /etc/openssl/CERTIFICATES/https_cert.cert >> /etc/lighttpd/server.pem
Une fois ceci fait, nous plaçons des droits adéquoits sur les fichiers:
/bin/chown root:root /etc/lighttpd/server.pem /bin/chmod go-rw /etc/lighttpd/server.pem
Enfin, activez le module SSL de Lighttpd :
/usr/sbin/lighty-enable-mod ssl
Et rechargez votre configuration :
/etc/init.d/lighttpd force-reload
Configurations manuelles
Configuration des dates d'expiration du contenu
Depuis peu, j'utilise l'extension Firefox YSlow pour optimiser le temps de chargement des sites que je développe. Cette extension recommande de fixer les dates d'expiration du contenu statique dans un futur distant. Par défaut, Lighttpd ne met pas en place de dates d'expirations. Pour ajouter une expiration future de certains de vos contenus dans Lighttpd, utilisez les 2 éléments suivants dans la configuration de votre site.
Il faut activer le module expire :
server.modules += ( "mod_expire" )
Et il faut configurer les dossiers ou se trouve le contenu statique. La configuration ci-dessous correspond à un site Symfony :
expire.url = ( "/images/" => "access plus 1 years", "/css/" => "access plus 1 years", "/js/" => "access plus 1 years", "/favicon.ico" => "access plus 1 years" )
Une fois ceci fait, testez la configuration de Lighttpd :
/usr/sbin/lighttpd -t -f /etc/lighttpd/lighttpd.conf
Et rechargez cette configuration :
/etc/init.d/lighttpd force-reload
merci