Vous êtes ici : Accueil / Debian GNU/Linux / Serveurs / HTTP / Installer et configurer LigHTTPd sur Debian

Installer et configurer LigHTTPd sur Debian

Par Pierre-Yves Landuré Dernière modification 02/03/2018 20:35

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 aide à installer LigHTTPd avec support du PHP 5.

Ce guide est testé sur:

  • Debian 5.0 Lenny
  • Debian 6.0 Squeeze

Prérequis

Ce guide recommande la mise en place des règles de blocage de DFind décrites dans l'article Bloquer le scanner de vulnérabilités DFind.

Installation

Installez le serveur:

command apt-get install lighttpd libterm-readline-gnu-perl

L'outil en ligne de commande lighty-tools simplifie l'administration de Lighttpd. Les guides présents sur ce site l'utilisent intensivement. Mettez en place l'outil:

command wget "http://howto.biapy.com/fr/debian-gnu-linux/serveurs/http/installer-et-configurer-lighttpd-sur-debian/lighty-tools/at_download/file" \
    --output-document="/usr/bin/lighty-tools"
command chmod +x "/usr/bin/lighty-tools"

Affichez l'aide de ce script:

command lighty-tools --help

Des exemples d'utilisation de cet outil sont disponibles dans la suite de cet article.

Protection à l'aide de fail2ban

Installez fail2ban :

command apt-get install fail2ban

Ajoutez les règles de protection de Lighttpd (basées sur les règles Apache 2) à la configuration de Fail2ban:

if [ ! -e '/etc/fail2ban/jail.local' ]; then
  command touch '/etc/fail2ban/jail.local'
fi
if [ -z "$(command grep "[lighttpd]" '/etc/fail2ban/jail.local')" ]; then
echo "
[lighttpd]
enabled = true
port  = http,https
filter  = apache-auth
logpath = /var/log/lighttpd/*error.log
maxretry = 6

[lighttpd-noscript]
enabled = true
port    = http,https
filter  = apache-noscript
logpath = /var/log/lighttpd/*error.log
maxretry = 6

[lighttpd-overflows]
enabled = true
port    = http,https
filter  = apache-overflows
logpath = /var/log/lighttpd/*error.log
maxretry = 2
" >> '/etc/fail2ban/jail.local'
fi

Redémarrez fail2ban:

/etc/init.d/fail2ban restart

Mise en place de PHP5

Installez PHP5 en mode CGI:

command apt-get install php5-cgi

Assurez-vous que la configuration FastCGI de LigHTTPd utilise PHP5 (sur Debian Lenny):

if [ -n "$(command 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 le module FastCGI:

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

Rechargez la configuration du serveur:

/etc/init.d/lighttpd force-reload

Configuration de PHP5

Ajustez la configuration de PHP 5 pour en améliorer la sécurité:

if [ -d '/etc/php5/conf.d' ]; then
echo '; Harden PHP5 security

; Disable PHP exposure
expose_php = Off

;Dangerous : disable system functions. This can break some administration softwares.
;disable_functions = symlink,shell_exec,exec,proc_close,proc_open,popen,system,dl,passthru,escapeshellarg,escapeshellcmd
' > '/etc/php5/conf.d/security-hardened.ini'

echo '; Set mbstring defaults to UTF-8
mbstring.language=UTF-8
mbstring.internal_encoding=UTF-8
mbstring.http_input=UTF-8
mbstring.http_output=UTF-8
mbstring.detect_order=auto' \
> '/etc/php5/conf.d/mbstring.ini'
fi

Rechargez la configuration:

/etc/init.d/lighttpd force-reload

Activation de X-SendFile pour PHP

L'entête X-Sendfile permet aux applications Web écrites en PHP de déléguer le téléchargement de fichiers au serveur HTTP. Cela accélère de manière drastique les performances.

Détectez le nom du fichier de configuration du module FastCGI:

PHP_FCGI_FILE="/etc/lighttpd/conf-available/15-fastcgi-php.conf"
if [ ! -e "${PHP_FCGI_FILE}" ]; then
PHP_FCGI_FILE="/etc/lighttpd/conf-available/10-fastcgi-php5.conf"

if [ ! -e "${PHP_FCGI_FILE}" ]; then
PHP_FCGI_FILE="/etc/lighttpd/conf-available/10-fastcgi-php.conf"
fi
fi

Activez le support de X-SendFile:

if [ -z "$(command grep "x-send-file" "${PHP_FCGI_FILE}")" ]; then
command sed -i -e '/bin-path/a\
\t\t"allow-x-send-file" => "enable",' \
"${PHP_FCGI_FILE}"
fi

Rechargez la configuration:

/etc/init.d/lighttpd force-reload

Voici un exemple d'utilisation de cette entête HTTP en PHP:

// as this is an example, here's the static file. Usually, you may
// have something like /download.php?file_id=500 etc.
$file_on_harddisk = "/var/www/archive.tar.gz";
$file_to_download = "download.tar.gz";

header( sprintf('Content-Disposition: attachment; filename="%s"', $file_to_download) );
Header( sprintf("X-LIGHTTPD-send-file: %s", $file_on_harddisk) );

Désactiver l'affichage du contenu des dossiers

Par défaut, Lighttpd affiche le contenu des dossiers lorsqu'aucun fichier index n'est présent. Ce comportement facilite l'obtention des fichiers présents sur le serveur. Désactivez cette fonctionnalité grâce à:

command echo '## directory listing configuration
## we disable the directory listing by default
##

$HTTP["url"] =~ "^/" {
  dir-listing.activate = "disable"
}' > '/etc/lighttpd/conf-available/20-disable-listing.conf'

Activez la configuration :

command lighty-enable-mod disable-listing

Rechargez la configuration:

/etc/init.d/lighttpd force-reload

Administration simplifiée avec lighty-tools

Mise en place d'un hôte virtuel

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"

Mise en place d'une redirection

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/"

Configurations avancées

URL Rewriting

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. Déclarez le fichier "index.php" de ces applications Web comme gestionnaire des erreurs 404 en ajoutant cette ligne dans le fichier de configuration de l'hôte virtuel concerné (ajustez la valeur en gras à l'application):

server.error-handler-404 = "/index.php"

Configuration des dates d'expiration du contenu

Mettre en place des dates d'expiration pour le contenu statique optimise les performances des sites hébergés par le serveur HTTP en maximisant l'utilisation du cache des navigateurs. Pour mettre en place des dates d'expiration pour votre contenu statique, ajoutez à la configuration de vos hôtes virtuels les options suivantes:

Activez le module expire :

server.modules += ( "mod_expire" )

Fixez une date d'expiration pour chaque emplacement contenant des fichiers statiques. Par exemple, pour un site utilisant le framework Symfony (ajustez les valeurs en gras à vos besoins):

expire.url = (
"/images/" => "access plus 1 years",
"/css/" => "access plus 1 years",
"/js/" => "access plus 1 years",
"/favicon.ico" => "access plus 1 years"
)

Testez la configuration du serveur:

command lighttpd -t -f /etc/lighttpd/lighttpd.conf

Rechargez la configuration:

/etc/init.d/lighttpd force-reload

Mise en place du protocole HTTPS

Cette section nécessite de disposer d'un certificat SSL. Une procédure de création est décrite dans le guide Créer un certificat SSL / TLS sur Debian.

Regroupez les clefs privée et publique du certificat SSL dans le fichier /etc/lighttpd/server.pem (ajustez les chemins des clefs à votre besoin):

command cp '/etc/ssl/private/www.domain.com.key' '/etc/lighttpd/server.pem'
command cat '/etc/ssl/certificates/www.domain.com.crt' >> '/etc/lighttpd/server.pem'

Sécurisez l'accès au fichier server.pem:

command chown root:root /etc/lighttpd/server.pem
command chmod go-rw /etc/lighttpd/server.pem

Si votre certificat a été signé par une autorité de certification fournissant des certificats racine et intermédiaire, réunissez lez dans le fichier ca-certs.pem:

command cp '/etc/ssl/roots/www.domain.com-root.key' '/etc/lighttpd/ca-certs.pem'
command cat '/etc/ssl/chains/www.domain.com.ca' >> '/etc/lighttpd/ca-certs.pem'

Modifiez la configuration de Lighttpd pour prendre en compte le fichier ca-certs.pem:

command echo '$SERVER["socket"] == "0.0.0.0:443" {
ssl.engine  = "enable"
ssl.pemfile = "/etc/lighttpd/server.pem"
ssl.ca-file = "/etc/lighttpd/ca-certs.pem"
}' > /etc/lighttpd/conf-available/10-ssl-with-ca.conf

Activez le module SSL de Lighttpd (utilisez le module "ssl" si votre certificat n'utilise un certificat intermédiaire):

command lighty-enable-mod ssl-with-ca

Testez la configuration du serveur:

command lighttpd -t -f /etc/lighttpd/lighttpd.conf

Rechargez la configuration:

/etc/init.d/lighttpd force-reload

    Références

    Ces livres peuvent vous aider:

    Remerciements