Installer et configurer LigHTTPd sur Debian
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 exposureexpose_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:
- Lighttpd: Installing, Compiling, Configuring, Optimizing,and Securing This Lightning-fast Web Server
- Lighttpd
Remerciements
- Merci aux développeurs de LigHTTPd.
- Merci à Mayflower Blog pour Make the download of large files with PHP (and lighty) very easy.
- Merci à StartCom pour HOWTO: Certificate installation instructions for Lighttpd.