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 ?
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.
Il suffit d'utiliser le gestionnaire de paquets pour obtenir ce serveur web
sudo apt-get install lighttpd lighttpd-doc
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.
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 :
## 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.md vhosts/www.monsite.com
.
## 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...
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 :
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.
@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
@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"
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 :