Serveur Web : lighttpd

Message 1, par Elzen

§ Posté le 28/12/2012 à 19h 57m 05

Internet ne se résume pas au Web, mais le Web fait quand même partie d'Internet ; moi qui ait un blog à tenir, je ne pouvais pas ne pas installer de serveur Web sur ma machine(1).

Le serveur Web le plus utilisé dans le monde est Apache, et c'est lui que j'avais sur mon ancienne machine. Cependant, je ne vais pas entrer dans les détails, mais il présente quelques lourdeurs, au niveau tant de la configuration que de l'utilisation.


En cherchant des serveurs Web légers, je suis essentiellement tombé sur deux choix principaux : lighttpd et nginx. Le seul vrai comparatif que j'ai pu trouver entre les deux est sur cette page en anglais, mais pas grand chose de ce qui est évoqué ne m'a spécialement convaincu.

Alors, finalement, je me suis décidé au feeling : le nom et l'icône de lighttpd sont largement plus chouettes que ceux de nginx, alors je me suis dit que ça irait. Oui, je sais, c'est très loin d'être un critère objectif.


C'est donc désormais lighttpd (à prononcer « lighty », paraît-il) qui fait tourner ce blog.

En plus de la configuration de base, j'avais besoin de deux choses : un CGI pour les pages dynamiques, et une gestion de l'authentification. Quelques recherches dans la documentation m'ont rapidement indiqué comment faire.


Le fichier à éditer est /etc/lighttpd/lighttpd.conf. On peut également ajouter des fichiers spécifiques dans le répertoire approprié (le même nom, avec « .d » à la fin, comme souvent) ; mais personnellement, je préfère un fichier unique.

Pour obtenir les réglages dont j'ai besoin, il suffit de rajouter ceci :

# Activation des modules requis.
server.modules += (
	"mod_auth",
	"mod_fastcgi"
)

# Pages d'erreur spécifiques.
server.error-handler-403 = "/errpage.php"
server.error-handler-404 = "/errpage.php"

# Activation de PHP comme CGI.
fastcgi.server = ( ".php" => ((
  "bin-path" => "/usr/bin/php-cgi",
  "socket" => "/tmp/php.socket",
  "max-procs" => 1,
  "bin-environment" => ( 
    "PHP_FCGI_CHILDREN" => "4",
    "PHP_FCGI_MAX_REQUESTS" => "10000"
  ),
  "bin-copy-environment" => (
    "PATH", "SHELL", "USER"
  ),
  "broken-scriptfilename" => "enable"
)))

# Restriction d'accès aux pages dont le nom commence par un « _ »
$SERVER["socket"] == ":80" {
  $HTTP["url"] =~ "/_" {
    url.access-deny = ("")
  }
}

# Activation de l'authentification pour tout le site en HTTPS.
$SERVER["socket"] == ":443" {
  ssl.engine = "enable"
  ssl.pemfile = "/etc/ssl/private/localhost.pem"

  auth.debug = 0
  auth.backend = "htdigest"
  auth.backend.htdigest.userfile = "CHEMIN/passwd"

  auth.require = ( "/" => (
    "method" => "digest",
    "realm" => "",
    "require" => "valid-user"
  ))
}

(Bien sûr, il faut remplacer CHEMIN par le vrai chemin d'accès au fichier contenant les mots de passe)


Il faut également s'occuper de générer le certificat TLS. Comme indiqué dans la documentation Ubuntu, il suffit de lancer (en root) « make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/private/localhost.pem » et de répondre aux questions.


Ceci fait, il n'y a plus qu'à redémarrer le serveur avec la commande « service lighttpd restart » (toujours en tant que root, bien sûr), et le tour est joué.


(Suite au décès inopiné de mon précédent serveur, je profite de mettre en place une nouvelle machine pour essayer de refaire un outil de blog digne de ce nom. J'en profiterai d'ailleurs aussi pour repasser un peu sur certains articles, qui commencent à être particulièrement datés. En attendant, le système de commentaires de ce blog n'est plus fonctionnel, et a donc été désactivé. Désolé ! Vous pouvez néanmoins me contacter si besoin par mail (« mon login at ma machine, comme les gens normaux »), ou d'ailleurs par n'importe quel autre moyen. En espérant remettre les choses en place assez vite, tout plein de datalove sur vous !)