{{tag>Trusty BROUILLON}} ====== LLSP : un serveur HTTP Lighty + PHP + SQLite (LLSP) ====== Un serveur **LLSP** (lighty+sqlite+php) combine sous **__L__**inux : * **__L__**ighttpd ("**lighty**"), beaucoup moins gourmand en ressources que Apache * **__S__**QLite, beaucoup moins gourmand en ressources que MySQL. * **__P__**HP Voir aussi [[http://ezvz.blogspot.fr/2010/05/lighttpd-how-to-fast-and-secure-web.html]], retranscrit et traduit ici : [[logiciel:internet:lighty:start]] ===== Pré-requis ===== Par défaut, la racine du site est située en **/var/www**, emplacement qui n'est accessible qu'au super-utilisateur pour permettre à l'utilisateur de mettre à jour les pages Web sans avoir besoin d'être root. Nous allons déplacer cette racine vers un disque dur ((que nous noterons **[DISQUE]**)) et lui donner des droits commodes. La racine sera en **[DISQUE]/srv/www/** et montée sur **/srv/www** via le fichier **fstab**, sans toucher au fichier **lighttpd.conf**. Ce disque supportera tous les serveurs. Nous allons créer l'arborescence : DISQUE | +-- srv | +-- ftp | +-- www <--- /var/www Pour créer cette arborescence, exécuter les commandes :...@...:~$ sudo mkdir -p [DISQUE]/srv/{ftp,www} Éditez avec les droits d'administration le fichier **/etc/fstab** pour y ajouter la ligne : ... # Mes montages [DISQUE]/srv /srv none bind 0 0 [DISQUE]/srv/www /var/www none bind 0 0 Activez ce montage :...@...:~$ sudo mount /srv La racine du site est désormais accessible de trois façons : **/srv/www**, **/var/www** et **[DISQUE]/srv/www**. Créez le groupe et l'utilisateur **www-data:www-data** ; ajoutez l'utilisateur **$USER** au groupe **www-data** : * sudo addgroup --system www-data sudo adduser www-data www-data sudo usermod -a -G www-data $USER N'oubliez pas l'option **-a** ! Sinon, l'utilisateur perdra son appartenance aux groupes dont il faisait partie. Changez les autorisations sur le répertoire racine : * sudo chown -R www-data:www-data /srv/www sudo chmod -R 2770 /srv/www Si [DISQUE] est en **ntfs**, il doit être monté avec l'option **permissions** dans **/etc/fstab** pour que les droits soient réglables. Désormais, * le répertoire **[DISQUE]/srv/www** est la racine du site. * l'utilisateur $USER (qui fait partie du groupe **www-data**) a aussi accès à ce répertoire. * tout nouveau sous-répertoire fait partie du groupe **www-data** (bit setgid=2) ===== Installation ===== ==== Installation de Lighttpd ==== Installez le paquet **[[apt>lighttpd-mod-webdav,lighttpd]]** ou en ligne de commande :$ sudo apt install lighttpd-mod-webdav lighttpd Si vous allez sur l'adresse [[http://localhost]] (ou [[http://192.168.0.31]] pour un Raspberry Pi), vous devriez voir la page d’accueil par défaut de lighttpd : {{logiciel:internet:serveur:lighttpd-01.jpg|}} Montez la racine : * sudo mount /var/www ==== Installation de PHP5 ==== [[tutoriel:mini-tutoriels:comment_installer_un_paquet|installez les paquets]] **[[apt>php5-cgi,php5-curl,php5-gd,php5-idn,php-pear,php5-imagick,php5-imap,php5-mcrypt,php5-memcache,php5-ming,php5-ps,php5-pspell,php5-recode,php5-snmp,php5-tidy,php5-xmlrpc,php5-xsl,php5-dev]]**, ou en ligne de commande : * sudo aptitude install -y php5-cgi php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-tidy php5-xmlrpc php5-xsl php5-dev Nous en profitons pour installer d'autres modules utiles de PHP5. Pour lister les modules PHP5 disponibles, tapez ceci: * apt-cache search php5 Installez ceux qui vous intéressent. Pour activer PHP5 dans Lighttpd, [[tutoriel:mini-tutoriels:ficedit#Modifier un fichier avec les droits d'administration|ouvrez avec les droits d'administration]] le fichier **/etc/php5/cgi/php.ini** pour le modifier comme ceci : ^action^modifier la ligne^pour obtenir^ |dé-commentez|;cgi.fix_pathinfo=1|cgi.fix_pathinfo=1| |mettez à **On**|zlib.output_compression = Off|zlib.output_compression = On| Pour activer PHP via fastcgi, exécutez la commande suivante : * sudo lighty-enable-mod fastcgi fastcgi-php === Redémarrez Lighty === Lancez : * sudo service lighttpd restart === Test === Pour vérifier l'installation de PHP5, [[tutoriel:mini-tutoriels:ficedit#Modifier un fichier sans les droits d'administration|créez]] le fichier de test **/var/www/test.php** avec le contenu suivant : Installation de Lighttpd et de PHP

Resultats du test

Lighttpd

Lighttpd fonctionne.

Dossier courant

Dossier courant :

PHP

qui teste le fonctionnement de lighty et php et affiche le répertoire en cours. Pour la lancer : [[http://localhost/test.php]] ou [[http://192.168.0.31/test.php]] ==== Installation de SQLite, du module webdav et de PECL ==== Pour mettre en place SQLite et webdav, [[tutoriel:mini-tutoriels:comment_installer_un_paquet|installez les paquets]] **[[apt>php5-sqlite,sqlite3,libsqlite3-dev,lighttpd-mod-webdav,apache2-utils,libpcre3-dev,build-essential]]** ou en ligne de commande : * sudo aptitude install -y php5-sqlite sqlite3 libsqlite3-dev lighttpd-mod-webdav apache2-utils libpcre3-dev build-essential ==== Activation de quelques modules ==== Les modules **compress** et **alias** sont activés par défaut à l'installation de lighty. Le vérifier en lisant le fichier **/etc/lighttpd/lighttpd.conf** : dans la liste de modules au début, leurs lignes ne sont pas commentées. Si ce n'est pas le cas, dé-commentez-les. Pour activer les modules **auth**, **accesslog**, **expire**, **evhost**, **no-www** et **webdav**, lancez les commandes : * sudo lighty-enable-mod auth accesslog expire evhost no-www webdav sudo service lighttpd restart ^accesslog|active le log des accès dans le fichier **/var/log/lighttpd/access.log**| ^expire|limite le temps de conservation des fichiers statiques (c'est-à dire sans php) par le navigateur de l'utilisateur.\\ Cela allège le travail du Raspberry Pi en diminuant les demandes et le transfert de données.\\ La date de validité du fichier fait que le navigateur ne demande plus un fichier qu'il a déjà.| ^evhost|active les hôtes virtuels| ^no-www|redirige **%%www.xxx.tld%% -> xxx.tld**| ^webdav, auth|serveur webdav| ^sudo service lighttpd restart|relance lighty| [[#Redémarrez Lighty|Redémarrez Lighty]] ==== Installation de PHP APC ==== Lancez la commande : * sudo pecl install apc Pour désinstaller : * sudo pecl uninstall apc L'installation de APC prend un peu de temps. Répondre aux questions : ^questions concernant **Apache**|répondre **no**| ^autres questions|accepter la réponse **par défaut** (touche Entrée)| [[tutoriel:mini-tutoriels:ficedit#Modifier un fichier avec les droits d'administration|Créez avec les droits d'administration]] le fichier **/etc/php5/cgi/conf.d/apc.ini** pour y écrire les lignes suivantes : extension=apc.so apc.enabled=1 apc.shm_size=30 [[#Redémarrez Lighty|Redémarrez Lighty]] ==== Vérification ==== * Sur un PC en local : Ouvrir dans un navigateur l'adresse [[http://localhost]] * ou [[http://server.exemple.com]] sur internet * ou, sur un PC du réseau, ouvrir l'adresse (ex. d'un Raspberry Pi) [[http://framboise.local]] (exemple de nom réseau du Raspberry Pi en utilisant avahi). La page d’accueil par défaut de lighttpd s'affiche : {{logiciel:internet:serveur:lighttpd-01.jpg?800|}} En lançant [[http://localhost/test.php]] ou [[http://framboise.local/test.php]], notre page de test s'affiche, qui teste le fonctionnement de lighty et php et affiche le répertoire en cours. ===== Configuration ===== * Pour retrouver le fichier lighttpd.conf d'origine : * télécharger le paquet deb sur le site [[https://packages.debian.org/fr/sid/lighttpd#Télécharger lighttpd]] * l'ouvrir avec le gestionnaire d'archives * et l'extraire. Pour éviter de modifier le fichier de configuration **/etc/lighttpd/lighttpd.conf** livré avec l'application, nous utiliserons un fichier de configuration **/etc/lighttpd/conf-available/40-config.conf** que nous activerons. Ainsi, les réglages ne seront pas affectés par les mises à jour et les migrations seront simplifiées (il suffira de récupérer le fichier de configuration). sur le même principe, il est possible de créer et d'activer des fichiers **/etc/lighttpd/conf-available/50-xxx.conf** pour des configurations particulières (par exemple **/etc/lighttpd/conf-available/50-dokuwiki.conf** pour configurer l'accès à dokuwiki) ==== Configuration de base : fichier /etc/lighttpd/conf-available/40-config.conf ==== * Dans notre fichier **40-config.conf** : * nous ne pouvons pas modifier une variable globale (comme **server.document-root**) : on aurait une erreur de double définition. * mais dans le cas d'une liste, nous pouvons y ajouter ce que nous voulons par **+=** (exemple ici pour **compress.filetype**), mais pas la redéfinir. Pour les directives de configuration, voir cette page de la documentation officielle : [[http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs]] [[tutoriel:mini-tutoriels:ficedit#Modifier un fichier avec les droits d'administration|Créez avec les droits d'administration]] le fichier **/etc/lighttpd/conf-available/40-config.conf** pour y placer les réglages voulus, par exemple comme ceci : # Quelques définitions de variables pour se faciliter la vie. var.basedir = server.document-root var.confdir = "/etc/lighttpd" var.logroot = "/var/log/lighttpd" var.dokudir = "doc" etag.use-inode = "enable" etag.use-mtime = "enable" etag.use-size = "enable" static-file.etags = "enable" # Pour éviter les erreurs 417 server.reject-expect-100-with-417 = "disable" # sécurisation # interdiction d'accès aux fichiers .htaccess $HTTP["url"] =~ "/(\.|_)ht" { url.access-deny = ( "" ) } # Sécurisation de dokuwiki # domaine doc.* : $HTTP["host"] =~ "(^" + dokudir + "\.)" { $HTTP["url"] =~ "^/(bin|data|inc|conf)/" { url.access-deny = ( "" ) } } # domaine */doc : $HTTP["url"] =~ "^/" + dokudir + "/(data|conf|bin|inc)/+.*" { url.access-deny = ("") } # Format du log : accesslog.format = "%h %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" # module expire : date limite 7 jours $HTTP["url"] =~ "\.(jpg|gif|png|css|js|svg)$" { expire.url = ( "" => "access 7 days" ) } # module compress compress.filetype += ("text/xml","application/x-javascript", , "application/javascript", "text/javascript", "text/x-js", "text/css", "text/html", "text/plain", "image/png", "image/gif", "image/jpg", "image/svg+xml", "application/xml") # module awstats alias.url += ( "/icon/" => "/var/www/awstats/wwwroot/icon/" ) alias.url += ( "/stat" => "/var/www/awstats/wwwroot/cgi-bin/" ) $HTTP["url"] =~ "^/stat($|/)" { # Pour que http://.../stat/ renvoie sur http://.../stats/awstats.pl index-file.names = ("awstats.pl") # perl et cgi cgi.assign = ( ".pl" => "/usr/bin/perl", ".cgi" => "/usr/bin/perl" ) } # module WebDAV alias.url += ( "/webdav" => "/var/www" ) ^sécurisation|on interdit l'accès aux fichiers .htaccess| ^Format du log|format du fichier access.log| ^module expire|paramétrage de ce module| ^module compress|on ajoute les filetypes voulus (avec **+=**)| Pour le module **alias**, [[tutoriel:mini-tutoriels:ficedit#Modifier un fichier avec les droits d'administration|ouvrez avec les droits d'administration]] le fichier **/etc/lighttpd/lighttpd.conf** et vérifiez, dans la liste de modules au début, que mod_alias est dé-commenté. Si ce n'est pas le cas, ajoutez à **/etc/lighttpd/conf-available/40-config.conf** la ligne suivante : server.modules += ("mod_alias") Activez cette configuration : $ sudo lighty-enable-mod config Pour en savoir plus sur le format du fichier de log access.log, voir [[logiciel:internet:lighty:access.log:start]] **__Module accesslog : journaux d'accès__** Chaque semaine, le fichier en cours sera automatiquement sauvegardé dans un fichier "access.log.2.gz" et un nouveau fichier "access.log" sera démarré. **__Format par défaut de lighty__** :accesslog.format = "%h %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" soit : - %h -> adresse du visiteur - %V -> adresse du serveur demandé - %u -> utilisateur - %t -> horodatage - \"%r\" -> "requête" - %>s -> code de retour - %b -> nombre d'octets envoyés - \"%{Referer}i\" -> "adresse d'origine" - \"%{User-Agent}i\ -> type de navigateur (champ "User-Agent" du header) " " __Exemple de résultat__ : 192.168.0.1 doc.framboise - [14/Sep/2014:15:32:21 +0200] "GET / HTTP/1.1" 200 1558 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:32.0) Gecko/20100101 Firefox/32.0" ^%h|192.168.0.1|adresse du visiteur| ^%V|doc.framboise|adresse du serveur demandé| ^%u|-|utilisateur (ici un tiret : anonyme)| ^%t|[14/Sep/2014:15:32:21 +0200]|horodatage| ^\"%r\"|"GET / HTTP/1.1"|requête :\\ - méthode GET,\\ - ressource demandée : /,\\ - protocole : HTTP/1.1| ^%>s|200|code retour\\ - code commençant par 2 : succès\\ - code commençant par 3 : redirection\\ - code commençant par 4 : erreur| ^%b|1558|octets envoyés| ^\"%{Referer}i\"|"-"|adresse d'origine| ^\"%{User-Agent}i\"|"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:32.0) Gecko/20100101 Firefox/32.0"|type de navigateur| On peut ajouter : ^{X-Forwarded-For}i|Champ **X-Forwarded-For** du HTTP-header field (%i)| Pour info, le format standard de Apache est : "%h %l %u %t \"%r\" %>s %b" donnant : "127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326" avec le sens suivant : ^ élément ^ valeur ^ signification ^ ^%h|127.0.0.1|adresse IP de l'hôte distant qui a fait la demande au serveur.\\ Ce n'est pas forcément l'adresse IP de l'utilisateur, ce peut être celle d'un proxy.| ^%l|-|Un tiret dans la sortie indique que l'information n'est pas disponible.| ^%u|frank|ID utilisateur (au moment de l'authentification HTTP) de la personne qui demande le document.| ^%t |[10/Oct/2000:13:55:36 -0700]|Horodatage de réception de la demande.\\ Format : [jj/mm/aaaa:h:m:s zone]| ^\"%r\"|"GET /apache_pb.gif HTTP/1.0"|ligne de demande du client :\\ - méthode : GET\\ - ressource demandée : /apache_pb.gif\\ - protocole : HTTP/1.0| ^%>s|200|code d'état que le serveur envoie au client :\\ - code commençant par 2 : succès\\ - code commençant par 3 : redirection\\ - code commençant par 4 : erreur| ^%b|2326|taille de l'objet renvoyé au client, sans compter les en-têtes de réponse. Un tiret si rien n'a été retourné| ==== Awstats : surveillance du serveur ==== Je recommande d'utiliser **awstats** directement sur le serveur, sans installer le paquet, voir la page [[logiciel:internet:awstats:start1]]. * [[logiciel:internet:awstats:start]] ==== Module WebDAV ==== Nous l'avons déjà activé. Pour en savoir plus, voir la page [[logiciel:internet:lighty:webdav:start]] ==== Sous-domaines ==== D'après [[http://wiki.lavilotte-rolle.fr/doku.php?id=debian:sous-domaines]] Pour ajouter un sous domaine **wiki.mondomaine.fr** dont la racine est **/var/wiki** : [[tutoriel:mini-tutoriels:ficedit#Modifier un fichier avec les droits d'administration|ouvrez avec les droits d'administration]] le fichier **/etc/lighttpd/lighttpd.conf** et ajoutez la section suivante : $HTTP["host"] == "wiki.mondomaine.fr" { server.document-root = "/var/wiki/wikirolle" accesslog.filename = "/var/log/lighttpd/wiki.mondomaine.fr.log" } Relancez lighttpd : * # /etc/init.d/lighttpd force-reload Maintenant, configurez les dns pour les machines sur le réseau local. [[tutoriel:mini-tutoriels:ficedit#Modifier un fichier avec les droits d'administration|ouvrez avec les droits d'administration]] le fichier **/etc/hosts** sur les machines concernées et ajoutez la ligne suivante (en remplaçant 192.168.1.101 par l'ip de votre serveur web sur le réseau local) : 192.168.1.101 wiki.mondomaine.fr Si vous avez plusieurs domaines pour la même machine il est possible de tous les mettre sur la même ligne : 192.168.1.101 www.mondomaine.fr mondomaine.fr wiki.mondomaine.fr Pour vérifier que tout fonctionne, ouvrez l'url suivante dans un navigateur : [[http://wiki.mondomaine.fr]] Pour ouvrir le sous-domaine au monde, éditez le fichier de zones correspondant au domaine chez le fournisseur de nom de domaine : Le fichier doit ressembler à ceci : mon_serveur 10800 IN A 87.89.21.88 Ajoutez la ligne suivante à la fin du fichier : wiki 10800 IN CNAME mon_serveur.mondomaine.fr. ==== Hôtes virtuels (vhost) ==== === Hôtes virtuels simples === Soit à héberger le domaine **domaine.tld**. Créez l'arborescence pour les fichiers de ce domaine, par exemple **/var/www/domaine.tld** : * mkdir -p /var/www/domaine.tld [[tutoriel:mini-tutoriels:ficedit#Modifier un fichier avec les droits d'administration|Créez avec les droits d'administration]] un fichier **/etc/lighttpd/conf-available/90-vhost-domaine.tld.conf** contenant le code suivant : $HTTP["host"] =~ "^(www\.)?domaine\.tld$" { server.document-root = "/var/www/domaine.tld/" } -> Les URLs de type [[http://domaine.tld]] et [[http://www.domaine.tld]] sont dirigées vers le répertoire **/var/www/domaine.tld** Activez le domaine en lançant : * sudo lighty-enable-mod vhost-domaine.tld sudo service lighttpd force-reload Pour accéder à ce domaine via l'adresse locale du serveur (127.0.0.1 ou localhost) : De manière semblable, [[tutoriel:mini-tutoriels:ficedit#Modifier un fichier avec les droits d'administration|créez avec les droits d'administration]] un fichier **/etc/lighttpd/conf-available/90-vhost-domaine.tld** contenant le code suivant : $HTTP["host"] =~ "^xxx\.yyy\.zzz\.ttt$" { server.document-root = "/var/www/domaine.tld/" } $HTTP["host"] =~ "^domaine.tld$" { server.document-root = "/var/www/domaine.tld/" } Activez ce domaine par : * sudo lighty-enable-mod vhost-localhost\ && sudo service lighttpd force-reload === Sous-domaines automatisés === Soit à héberger le domaine **domaine.tld** et tous ses sous-domaines ***.domaine.tld** = **doc.domaine.tld**, **toto.domaine.tld**, etc. Chacun renverra au sous-répertoire correspondant (doc, toto, etc.) de la racine du serveur -> Les URLs de type [[http://xxx.domaine.tld]] sont dirigées vers le répertoire **/var/www/domaine.tld/xxx** Le module **evhost** construit la racine de document selon un modèle qui contient des jokers. Ces jokers peuvent représenter les parties du **hostname** soumis dans l'appel de la page HTTP, numérotées à partir de la fin : ^ paramètre ^ signification ^ exemple : http:333.222.111.framboise.home => ^ |%%|le symbole %|"%"| |%0|nom de domaine + tld|"framboise.home"| |%1|tld|"home"| |%2|nom de domaine sans tld|"framboise"| |%3|nom de sous-domaine de niveau 1|"111"| |%4|nom de sous-domaine de niveau 2|"222"| |%_|nom de domaine complet|"333.222.111.framboise.home"| evhost.path-pattern = "/home/www/servers/%3/pages/" ; evhost.path-pattern : modèle avec des jokers pour construire une documentroot [[tutoriel:mini-tutoriels:ficedit#Modifier un fichier avec les droits d'administration|Créez avec les droits d'administration]] le fichier **/etc/lighttpd/conf-available/90-vhost-domaine.tld.conf** avec le contenu suivant : #define a pattern for the host url finding # ex : http://xxx.yyy.zzz.framboise.tld # %% => % sign () # %0 => nom de domaine + tld => framboise.home # %1 => tld => home # %2 => nom de domaine sans tld => framboise # %3 => nom de sous-domaine de niveau 1 => zzz # %4 => nom de sous-domaine de niveau 2 => yyy # %5 => nom de sous-domaine de niveau 3 => xxx # etc. (numérotation de droite à gauche) # Configuration pour le domaine framboise.local (défini avec avahi sur le réseau local) $HTTP["host"] =~ "(^|\.)framboise\.local$" { include "include/config.conf" evhost.path-pattern = document-root + "/%3" } # Configuration pour le domaine domaine.tld : $HTTP["host"] =~ "(^|\.)domaine\.tld$" { include "include/config.conf" evhost.path-pattern = document-root + "/%3" } # Configuration pour le domaine localhost : $HTTP["host"] =~ "(^|\.)localhost$" { include "include/config.conf" evhost.path-pattern = document-root + "/%2" } Il suffit de créer un nouveau sous-répertoire **xxx** de la racine du serveur pour que les domaines **xxx.mondomaine.com**, **xxx.framboise.local** et **xxx.localhost** existent et fonctionnent immédiatement. Exemple pour que le domaine **www.domaine.tld** soit équivalent au domaine **domaine.tld** $HTTP["host"] =~ "^(www\.)?domaine\.tld$" { server.document-root = document-root + "/domaine.tld" } Activer le domaine en lançant : * sudo lighty-enable-mod vhost-domaine.tld sudo service lighttpd force-reload ==== Simplifier les fichiers de configuration avec des includes ==== Traduction de [[http://blog.lighttpd.net/articles/2005/11/25/simplify-your-configfiles-with-includes/]] Ou, autrement dit : "hébergement virtuel facile". Si la configuration de vos vhosts est complexe, comme avoir différentes options (static only, support php, rails applications pré-installées, ...) mais une configuration similaire pour chacun, vous ne pouvez pas utiliser les modules vhost et tout écrire à la main. Mais les includes et les variables peuvent aider. L'idée est de modulariser le fichier de configuration et de n'y mettre que les parties de la configuration dont le vhost a besoin. Mais d'abord, définissons notre configuration : - Tous les vhosts sont sous /var/www/servers/pages/ - certains vhosts ont des dossiers protégés - certains ont le support de PHP, certains utilisent des applications pré-installées La méthode classique est : $HTTP[“host”] == “www.example.org” { server.document-root = “/var/www/servers/www.example.org/pages/” auth.backend = “htpasswd” auth.backend.htpasswd.userfile = “/var/www/servers/www.example.org/htpasswd” auth.require = ... } Nous spécifions deux fois le chemin complet. Améliorons d'abord cela : $HTTP["host"] == "www.example.org" { var.basedir = "/var/www/servers/www.example.org/" server.document-root = basedir + "pages/" auth.backend = "htpasswd" auth.backend.htpasswd.userfile = basedir + "/htpasswd" auth.require = ... } Mais ce n'est seulement qu'un hôte, ajoutons-en un autre, qui sert des fichiers statiques : $HTTP["host"] == "www.example.com" { var.basedir = "/var/www/servers/www.example.com/" server.document-root = basedir + "pages/" } Tous les deux ont le même répertoire racine, **/var/www/servers/**. Sortons-le : var.basedir = "/var/www/servers/" $HTTP["host"] == "www.example.org" { var.servername = "www.example.org" server.document-root = basedir + servername + "/pages/" auth.backend = "htpasswd" auth.backend.htpasswd.userfile = basedir + servername + "/htpasswd" auth.require = ... } $HTTP["host"] == "www.example.com" { var.servername = "www.example.com" server.document-root = basedir + servername + "/pages/" } Le réglage **server.document-root** est maintenant exactement le même pour les deux serveurs.Sortons-le de nouveau, cette fois dans un fichoer include nommé **incl-docroot.conf** : ## set the docroot based on basedir and servername ## both have to be defined before server.document-root = basedir + servername + "/pages/" et voici notre nouveau fichier de configuration : var.basedir = "/var/www/servers/" $HTTP["host"] == "www.example.org" { var.servername = "www.example.org" include "incl-docroot.conf" auth.backend = "htpasswd" auth.backend.htpasswd.userfile = basedir + servername + "/htpasswd" auth.require = ( "/download" => ... ) } $HTTP["host"] == "www.example.com" { var.servername = "www.example.com" include "incl-docroot.conf" } La dernière étape déplacer la partie auth dans un fichier include nommé **incl-auth-htpasswd.conf** : ## set authentificate for a directory auth.backend = "htpasswd" auth.backend.htpasswd.userfile = basedir + servername + "/htpasswd" auth.require = ( authdir => ... ) et notre fichier de configuration : var.basedir = "/var/www/servers/" $HTTP["host"] == "www.example.org" { var.servername = "www.example.org" var.authdir = "/download/" include "incl-docroot.conf" include "incl-auth-htpasswd.conf" } $HTTP["host"] == "www.example.com" { var.servername = "www.example.com" include "incl-docroot.conf" } Ok, dernière étape : FastCGI pour un hôte. Nous créons un fichier include dès le début appelé **incl-fastcgi-php.conf** : fastcgi.server = ( ".php" => (( "bin-path" => "/usr/bin/php-cgi", "socket" => basedir + servername + "/tmp/php-" + PID + ".socket" ))) Si un hôte veut le support PHP, nous incluons simplement ce fichier : var.basedir = "/var/www/servers/" $HTTP["host"] == "www.example.org" { var.servername = "www.example.org" var.authdir = "/download/" include "incl-docroot.conf" include "incl-auth-htpasswd.conf" } $HTTP["host"] == "www.example.com" { var.servername = "www.example.com" include "incl-docroot.conf" include "incl-fastcgi-php.conf" } Ce qui nous amène à la dernière question : plusieurs noms pour le même vhost. Disons que **www.example.org** et **example.org** sont le même vhost sous différents noms. var.basedir = "/var/www/servers/" $HTTP["host"] =~ "^(www\.)?example\.org$" { var.servername = "www.example.org" var.authdir = "/download/" include "incl-docroot.conf" include "incl-auth-htpasswd.conf" } $HTTP["host"] == "www.example.com" { var.servername = "www.example.com" include "incl-docroot.conf" include "incl-fastcgi-php.conf" } === Sous-domaines automatisés === Soit à héberger le domaine **domaine.tld** et tous ses sous-domaines ***.domaine.tld** = **doc.domaine.tld**, **toto.domaine.tld**, etc. Chacun renverra au sous-répertoire correspondant (doc, toto, etc.) de la racine du serveur -> Les URLs de type [[http://xxx.domaine.tld]] sont dirigées vers le répertoire **/var/www/domaine.tld/xxx** Le module **evhost** construit la racine de document selon un modèle qui contient des jokers. Ces jokers peuvent représenter les parties du **hostname** soumis dans l'appel de la page HTTP, numérotées à partir de la fin : ^ paramètre ^ signification ^ exemple : http:333.222.111.framboise.home => ^ |%%|le symbole %|"%"| |%0|nom de domaine + tld|"framboise.home"| |%1|tld|"home"| |%2|nom de domaine sans tld|"framboise"| |%3|nom de sous-domaine de niveau 1|"111"| |%4|nom de sous-domaine de niveau 2|"222"| |%_|nom de domaine complet|"333.222.111.framboise.home"| evhost.path-pattern = "/home/www/servers/%3/pages/" ; evhost.path-pattern : modèle avec des jokers pour construire une documentroot [[tutoriel:mini-tutoriels:ficedit#Modifier un fichier avec les droits d'administration|Créez avec les droits d'administration]] le fichier **/etc/lighttpd/conf-available/90-vhost-domaine.tld.conf** avec le contenu suivant : #define a pattern for the host url finding # ex : http://xxx.yyy.zzz.framboise.tld # %% => % sign () # %0 => nom de domaine + tld => framboise.home # %1 => tld => home # %2 => nom de domaine sans tld => framboise # %3 => nom de sous-domaine de niveau 1 => zzz # %4 => nom de sous-domaine de niveau 2 => yyy # %5 => nom de sous-domaine de niveau 3 => xxx # etc. (numérotation de droite à gauche) # Configuration pour le domaine framboise.local (défini avec avahi sur le réseau local) $HTTP["host"] =~ "(^|\.)framboise\.local$" { include "include/config.conf" evhost.path-pattern = document-root + "/%3" } # Configuration pour le domaine domaine.tld : $HTTP["host"] =~ "(^|\.)domaine\.tld$" { include "include/config.conf" evhost.path-pattern = document-root + "/%3" } # Configuration pour le domaine localhost : $HTTP["host"] =~ "(^|\.)localhost$" { include "include/config.conf" evhost.path-pattern = document-root + "/%2" } Il suffit de créer un nouveau sous-répertoire **xxx** de la racine du serveur pour que les domaines **xxx.mondomaine.com**, **xxx.framboise.local** et **xxx.localhost** existent et fonctionnent immédiatement. Exemple pour que le domaine **www.domaine.tld** soit équivalent au domaine **domaine.tld** $HTTP["host"] =~ "^(www\.)?domaine\.tld$" { server.document-root = document-root + "/domaine.tld" } Activer le domaine en lançant : * sudo lighty-enable-mod vhost-domaine.tld sudo service lighttpd force-reload ==== Comment configurer lightty pour le https ==== === Configuration préalable === [[tutoriel:mini-tutoriels:comment_installer_un_paquet|Installez le paquet]] **[[apt>openssl]]** ou en ligne de commande : * sudo apt-get install openssl Vérifiez que lighttpd supporte le ssl : * lighttpd -v lighttpd-1.4.19 (ssl) - a light and fast webserver Build-Date: Jul 29 2008 18:58:09 Si ce n'est pas le cas, il faut recompiler lighttpd avec le support ssl. Créez un certificat ssl comme indiqué ici : [[http://dev.petitchevalroux.net/linux/generation-certificat-ssl-pour-https-linux.229.html]] === Configuration du https pour lighttpd === Créez un nouveau fichier de configuration : [[tutoriel:mini-tutoriels:ficedit#Modifier un fichier avec les droits d'administration|Créez avec les droits d'administration]] un fichier **/etc/lighttpd/conf-available/90-ssl.conf** et y écrire ce qui suit. Deux choix possibles : == Activer le ssl pour tous les domaines == Pour activer le ssl pour tous les domaines hébergés sur la machine, écrire ceci dans le fichier **/etc/lighttpd/conf-available/90-ssl.conf** : $SERVER["socket"] == ":443" { ssl.engine = "enable" ssl.pemfile = "/chemin/vers/certificat/server.pem" } == Activer le ssl pour un seul domaine == Pour activer le ssl sur un seul domaine (ici, ssl.//petitchevalroux.net//), commencez par rediriger toutes les requêtes http vers la version https. Pour cela, ajoutez dans le fichier ssl.conf la règle de redirection suivante : ... # Redirection des requêtes non https pour les domaines https $SERVER["socket"] == ":80" { $HTTP["host"] == "ssl.petitchevalroux.net" { url.redirect = ( ".*" => "https://ssl.petitchevalroux.net$0" ) } } Puis configurez le port https de lightty : # Configuration du ssl $SERVER["socket"] == ":443" { ssl.engine = "enable" ssl.pemfile = "/chemin/vers/certificat/ssl/server.pem" # On met le document root à /dev/null par défaut pour que les domaines non ssl répondent en 404 server.document-root = "/dev/null" # On surcharge le document root pour les domaines ayant le ssl activé $HTTP["host"] == "ssl.petitchevalroux.net" { server.document-root = "/chemin/vers/htdocs/" } } === Activation du ssl === Activez le fichier de configuration **ssl.conf** avec la commande : * lighttpd-enable-mod ssl Et rechargez **lightty** : * /etc/init.d/lighttpd force-reload Pour aller plus loin, voir la doc du **mod ssl** de **lightty** : [[http://redmine.lighttpd.net/wiki/lighttpd/Docs:SSL]] ===== Utilisation ===== Lancez l'application via le tableau de bord dash (Unity) ou via le terminal (toutes versions d'Ubuntu) avec la commande suivante : machin-chose ===== Désinstallation ===== Pour supprimer cette application, il suffit de supprimer son paquet. Selon la méthode choisie, la configuration globale de l'application est conservée ou supprimée. Les journaux du système, et les fichiers de préférence des utilisateurs dans leurs dossiers personnels sont toujours conservés. ===== Voir aussi ===== * **(en)** [[fr:logiciel:internet:serveur:http:lighty:start]] * **(fr)** [[http://dev.petitchevalroux.net/linux/lighttpd-ssl-linux.237.html]] ---- //Contributeurs principaux : [[utilisateurs:jamaique]].// //Basé sur [[http://www.document_source.com|« Titre original de l'article »]] par Auteur Original.//