GERBELOTBARILLON.COM

Parce qu'il faut toujours un commencement...

Lighttpd

Il existe de nombreux serveurs Web parmi lesquels des très connus (IIS, Apache, nginx), des plus spécifiques à certaines activités (tomcat, uvicorn, gunicorn) mais il en existe un qui se veut optimisé pour les environnements à haute performance.

Sans paraphraser la notice officielle, lighttpd utilise la mémoire et le CPU d'une manière plus efficace que les autres et consomme moins de ressources que des ténors du genre IIS. Il fournit également une palette large de compatibilités avec le FastCGI, Auth, la compression en sortie, la réécriture d'URL pour le mode proxy et bien d'autres.

Lighttpd est principalement disponible sur les environnements de type Linux mais est parfaitement fonctionnel sous Windows également. Avec Lighttpd vous pourrez utiliser PHP, Ruby, Python, FastCGI, hébergement virtuel (vhost)... Intéressant non ?

Installation

Je vous laisserai consulter la documentation du site de lighttpd mais je vous donne les quelques étapes dont j'ai eu besoin pour mes tests et usages personnels.

Installation sous Linux Debian/Ubuntu

Il suffit d'utiliser le gestionnaire de paquets pour obtenir ce serveur web

sudo apt-get install lighttpd lighttpd-doc

Installation sous Windows

Pour la mise en place sous Windows, il existe des binaires précompilés en 32 et 64 bits que vous trouverez ici -> http://lighttpd.dtech.hu/. Il vous suffit d'enregistrer celui qui correspond à votre architecture (normalement cela devrait être du genre lighttpd-x.x.xx-x-win64-ssl.zip). Une fois téléchargé, décompressez-le dans la racine (ou ailleurs) de votre machine en simplifiant le nom du dossier en lighttpd (plus simple pour les gestions des chemins ultérieurement). Le code source existe également si vous vous sentez de compiler l'application. Vous aurez alors pour cela besoin de l'environnement de développement de cygwin notamment, mais c'est une autre histoire...

Lighttpd repose sur un certain nombre de fichiers de configuration situés dans le dossier conf :

Si vous apportez des modifications au fichier de configuration principal, vous pouvez tester qu'il ne contient pas d'erreur avec la commande lighttpd.exe -tt -f conf/lighttpd.conf. Si tout est bon, vous pouvez lancer le serveur web par lighttpd.exe -D -f conf/lighttpd.conf.

Par défaut si tout s'est bien passé, en lançant simplement le serveur par lighttpd.exe, vous devriez pouvoir obtenir un site disponible sur http://localhost. Le fichier lighttpd.conf se suffit à lui-même pour disposer d'un serveur rapidement configuré sur un port 80, avec le contenu du site dans le dossier htdocs.

Exécuter le serveur en one-shot est intéressant pour tester ou si vous ne voulez pas faire de votre machine un serveur web de production. Pour lancer lighttpd sous forme de service Windows, il suffit d'exécuter lighttpd-service-install.exe pour la mise en place ou bien lighttpd-service-remove.exe pour supprimer le service Windows.

Serveurs virtuels

Le principe même d'utiliser un serveur web est de pouvoir héberger plusieurs sites par le même serveur web, sous la même ip de serveur. Pour cela il faut :

  1. Décommenter la ligne
    ## include virtual hosts (optional)
    include "vhosts.conf"
    pour signaler à lighttpd qu'il doit lire le fichier vhosts.conf à la recherche de configurations sur les serveurs web virtuels.
  2. Créer un dossier portant le nom FQDN de votre site web (www.monsite.com par exemple) dans le dossier vhosts. Par exemple, créer vhosts/www.monsite.com par
    md vhosts/www.monsite.com
    .
  3. Modifier ensuite le fichier vhosts.conf pour déclarer le site souhaité. Par exemple avec cette configuration très basique
    ## virtual host (for all listening port)
    $HTTP["host"] == "www.monsite.com" {
     server.document-root = vhosts_dir + "/www.monsite.com"
     dir-listing.activate = "disable"
     accesslog.filename   = log_root + "monsite.log"
    }

Créez ensuite un fichier index.html très basique dans ce dossier vhosts/www.monsite.com du type



   Mon Site
   

Bienvenue sur Mon site

Une fois les éléments modifiés, relancez le serveur Web et connectez-vous à http://www.monsite.com. Vous devriez obtenir...une erreur ! Bin oui, il n'y a aucun DNS dans le monde qui recense www.monsite.com.

Pour faire simple, éditez (en tant qu'administrateur) votre fichier c:\windows\system32\drivers\etc\hosts pour ajouter la ligne suivante :
x.y.z.t www.monsite.com monsite.com
Ainsi votre machine ira résoudre ce nom localement plutôt que sur Internet. Et maintenant vous devriez voir votre site apparaître...

Utilisation de Python

Utilisation de PHP avec FastCGI

Téléchargez l'environnement Non Thread Safe de php sur https://windows.php.net/download/. Décompressez l'archive dans la racine de votre disque pour obtenir un dossier C:\php. Renommez le fichier php.ini-production en php.ini. Ajoutez ce chemin à votre variable d'environnement PATH.

Dans le fichier lighttpd.conf, décommentez la ligne mod_fastcgi pour rendre disponible la fonctionnalité FastCGI avec lighttpd.

Toujours dans le fichier de configuration, décommentez ces lignes pour la prise en compte du module FastCGI

#### fastcgi module
## read fastcgi.txt for more info
## for PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini
## ... and PHP_FCGI_MAX_REQUESTS = 0 environment variable in system properties
fastcgi.server             = ( ".php" =>
                              ( "localhost" =>
                                (
                                  "host" => "127.0.0.1",
                                  "port" => 9000
                                )
                              )
                            )
Le port et le host définis vont pointer sur le processus FastCGI en écoute sur la machine donnée et sur le port donné.

Juste au-dessous du paragraphe précédent, décommentez cette partie concernant l'affectation des différentes extensions php à un unique serveur

## map multiple extensions to the same fastcgi server
fastcgi.map-extensions     = ( ".php3" => ".php",
                              ".php4" => ".php",
                              ".php5" => ".php",
                              ".phps" => ".php",
                              ".phtml" => ".php" )

Ensuite, pour que php puisse activer correctement FastCGI :

Tester la configuration Lighttpd + PHP-FastCGI

En préambule, commencez par télécharger le fichier https://redmine.lighttpd.net/attachments/download/660/RunHiddenConsole.zip Cela permettra d'exécuter des commandes batch en mode détaché en console. Placez le contenu de l'archive dans le dossier lighttpd pour que cela soit plus facilement accessible dans un batch.

Ensuite vous pouvez créer deux fichiers batch pour démarrer et arrêter l'environnement de Lighttpd + PHP.

Start-Lighttpd.bat
@ECHO OFF
ECHO Starting PHP FastCGI...
cd c:\php
set PHP_FCGI_MAX_REQUESTS=0
RunHiddenConsole.exe c:\PHP\php-cgi.exe -b 127.0.0.1:9000
ECHO Starting LightTPD...
ECHO.
cd c:\lighttpd
lighttpd.exe -v
ECHO.
lighttpd.exe -f conf\lighttpd.conf -m modules
EXIT
Stop-Lighttpd.bat
@ECHO OFF
            ECHO Stopping LightTPD...
taskkill /f /IM lighttpd.exe
ECHO Stopping PHP FastCGI...
taskkill /f /IM php-cgi.exe
ECHO.
EXIT

Sur exécution du script, si vous obtenez des erreurs lors du chargement des fichiers de configuration, modifiez le fichier de configuration lighttpd.conf pour préciser le chemin où se trouvent les fichiers de configuration attendus. Par exemple, si vous avez décompressé lighttpd dans le dossier c:\lighttpd alors modifiez le fichier avec

#### include important configuration files
## include path variables
include "c:/lighttpd/conf/variables.conf"
## include mimetype mapping file
include "c:/lighttpd/conf/mimetype.conf"
## include virtual hosts (optional)
include "c:/lighttpd/conf/vhosts.conf"

Installation en tant que service

Le dossier lighttpd dispose de deux utilitaires qui permettent d'installer et désinstaller lighttpd comme un service Windows. Mais cela ne fonctionne pas de manière simple car un événement d'ID 7024 survient qui n'est pas aisé à résoudre. Du coup, il faut utiliser une autre méthode pour monter l'exécutable en tant que service.

Il existe un certain nombre de programmes permettant de faire fonctionner un programme en tant que service, même si celui-ci n'avait pas été prévu pour cela à la base.

Je prends l'option de l'application WinSW, qui est un wrapper spécifiquement Windows.

Le fichier que vous venez de télécharger doit être copié dans le dossier C:\PHP sous le nom pwinsw.exe. Copiez également ce fichier dans le dossier contenant lighttpd (probablement c:\lighttpd) sous le nom lwinsw.exe

Dans le dossier c:\php, créez un fichier xml nommé pwinsw.xml dont le contenu est le suivant :


  PHP
  PHP
  PHP
  C:\php\php-cgi.exe
  C:\php\php-stop.cmd
  
  
  C:\lighttpd\logs
  roll
  -b 127.0.0.1:9000
  -cc:\php\php.ini
Vous pouvez créer un fichier php-stop.bat dans le dossier C:\php pour pouvoir arrêter le service
taskkill /f /IM php-cgi.exe

Dans le dossier contenant lighttpd.exe, créez un fichier xml nommé lwinsw.xml contenant les éléments suivants :


  Lighttpd
  Lighttpd
  Lighttpd
  C:\lighttpd\lighttpd.exe
  C:\lighttpd\lighttpd-stop.cmd
  C:\lighttpd\logs
  roll
  -fc:/lighttpd/conf/lighttpd.conf
  -mc:/lighttpd/modules
  -D
Dans ce même dossier, créez un fichier stop-lighttpd.bat avec les informations suivantes :
taskkill /f /IM lighttpd.exe

Maintenant vous pouvez démarrer la mise sous service par :

c:\lighttpd\lwinsw.exe install && c:\php\pwinsw.exe install && net start Lighttpd && net start PHP
Les services étant maintenant disponibles, ils peuvent être manipulés par les commandes suivantes :

Lighttpd

PHP