U-Classroom : Apache 2 (@skateinmars)

d'après 2007-10-02-apache.log, sur le site U-Classroom


20:35 Uggyca roule :)
20:35+racoon97skateinmars, quelle version d'Apache ?
20:35 jos[]c'est a quelle heure la récré ?
20:35+gapzhey Uggy :)
20:35 Uggygapz: ;)
20:35@skateinmarsracoon97: 2.X
20:35+racoon97ok :]
20:36@skateinmarssalut Uggy (mince je vais me faire traquer ;) )
20:36 Uggyskateinmars: 'lut :)
20:36 Neoxygenhtml seulement ?
20:36 cemoion parle de appache 2?
20:36+arthur-cemoi: oui
20:36 jos[]cemoi: au piquet !
20:36@skateinmarscemoi: oui mais il n'y aura pas de problemes pour s'adapter a apache 1
20:36@skateinmarsNeoxygen: on verra php rapidement
20:36 Neoxygenoki
20:37 cemoiok
20:37 walooko
20:37@skateinmarsjos[]: pas de recre, un peu de serieux non mais
20:37-!-mode/#ubuntu-fr-classroom [+m] by skateinmars

Le Web

Commencons par le Web

Donc, qu'est-ce que le Web à proprement parler ?
Pour essayer de faire simple, bref et compréhensible, on va dire que le Web est un réseau composé de l'ensemble des sites Internet disponibles publiquement, reliés entre eux par des hyperliens.

On est pas trop avancé, il nous faut maintenant savoir ce qu'est un site Internet, aussi appelé site Web.
C'est un ensemble de pages Web, liées entre elles.

Un site web a une adresse.
Regardons par exemple le site d'ubuntu-fr : http://ubuntu-fr.org/

La page Web principale de ce site propose des liens hypertextes vers d'autres pages et d'autres sites, par exemple : http://ubuntu-fr.org/telechargement

Bref, tout le monde ici a certainement déjà visité un site Web.

Mais cette mini intro me semble utile utile pour éviter les amalgames que certains font parfois entre Internet et le Web.

Par exemple, ici [cette page est une transcription d'une discussion ("chat") sur IRC], vous utilisez IRC, mais pas le Web (à moins d'utiliser CGI:IRC ou une applet Java mais c'est un cas particulier dont nous ne parlerons pas).

20:39-!-mode/#ubuntu-fr-classroom [-m] by skateinmars
20:39@skateinmarsdes questions ?
20:39 jos[]arf, y a kaamelott
20:39+gpocentekpas de questions ici
20:39 jos[]^^
20:39 ptitguipas pour le moment
20:40 termitorskateinmars: un site web implique le protocole http ?
20:40 Neoxygenben non mais pousse pas trop loins quand meme
20:40 tetsuo44tu vas parler de la structure des url (en particulier les constituant d'un domaine) ?
20:40@skateinmarstermitor: oui
20:40@skateinmarstetsuo44: plus ou moins oui
20:40 Uggytermitor: et hhtps ;)
20:40 Uggytermitor: https ;)
20:40 Neoxygenca vas prendre 10 jours
20:41 termitorskateinmars: donc un site web, c'estest un ensemble acccessible via http (ou https ) et le web c'est l'ensemble des sites publiquement acessible via http (et https)
20:41 walootermitor: mais dans un site web on peut faire des liens ftp ? c'est des liens vers le dehors du web ?
20:41@skateinmarswaloo: oui mais qui restent accessibles par internet
20:41 termitorwaloo: oui , mais si tu n'a pas une base http , tu ne va pas loin
20:41 alex206bonjour
20:41@skateinmarson peut aussi faire des liens pour le mail, irc, jabber, etc...
20:42 waloogopher
20:42 waloook
20:42 walooje vois
20:42 tetsuo44donc vers des protocoles qui necessite un autre type de client que le navigateur web
20:42 termitoret il a meme d'autre protocole qui pourrais remplacer http , genr bxxp
20:42@skateinmarsok, on continue

Pour accéder à un site web, il vous faut utiliser un client Web, appelé communement Navigateur.
Par exemple : firefox, lynx, opera, konqueror, w3m...
C'est la qu'intervient le protocole HTTP.

le protocole HTTP

Voyez par exemple le site suivant http://test.skateinmars.net/
Visitez le avec votre navigateur et vous verrez une page toute simple qui s'affiche.
Comment votre navigateur peut-il afficher cette page ? Il l'a en fait demandée au serveur qui s'occupe de ce site.

On va faire pareil à la main !

Ouvrez une console et tapez :

telnet test.skateinmars.net 80

Vous voyez s'afficher ceci :

Trying 82.228.105.196...
Connected to skateinmars.net.
20:44@skateinmarsdes problemes jusqu'ici ?
20:45+gpocentekça marche \o/
20:45 cemoipas de pb
20:45 Uggyca roule..
20:45 waloonickel

Vous êtes donc connecté au serveur identifié par le nom skateinmars.net et l'adresse IP 82.228.105.196

Le serveur attend une action de votre part.
Tapez donc dans la console

GET / HTTP/1.1
Puis entrée, puis
Host: test.skateinmars.net
20:45 walooha non test.skateinmars.net
20:45 jos[]j'a pas de telnet
20:46 jos[]faut l'installé
20:46@skateinmarsinstalle le paquet telnet jos[]
20:46 walooHTTP/1.1 301 Moved Permanently
20:46 Koylre jos[]
20:46+Sp4rKy^^
20:46 jos[]re Koyl
20:47@skateinmarswaloo: tu ne t'es pas trompé dans le Host ?
20:47 waloonon, de version de protocole
20:47 walooc'est bon avec HTTP/1.1
20:48-!-mode/#ubuntu-fr-classroom [+m] by skateinmars

Vous voyez donc s'afficher du texte.

Si vous êtes toujours connecté (telnet ne s'est pas arrété) entrez Control+C, puis entrée, et vous verrez un " Connection closed by foreign host."

20:48+gpocentekeuh... je reçois rien skateinmars...
20:49@skateinmarsgpocentek: il faut retaper entrée après avoir terminé la ligne Host (2 fois entrée)
20:49+gpocentekah oui :)
20:49+racoon97ah oui la ça passe
20:49@skateinmarsdésolé ;)

La connexion au serveur est maintenant terminée.

Ce texte que vous pouvez voir , c'est le même que vous avez vu dans votre navigateur tout à l'heure : c'est une page Web.
Verifiez dans votre navigateur en regardant la source de la page : Bouton droit, "Code source de la page" sous Firefox.

20:50@skateinmarsTout est ok ?
20:50+gpocentekperfect
20:50 walooil répond des trucs en plus au début...
20:50@skateinmarswaloo: on va voir ca ;)

Vous venez donc d'utiliser le protocole HTTP.

Qu'est-ce qu'un protocole (de communication) tout d'abord ?

C'est une spécification qui définit une manière de communiquer entre plusieurs machines. HTTP, c'est le protocole que l'on a choisi pour le Web. Il y a en d'autres pour d'autres usages, FTP par exemple.

Vous pouvez d'ailleurs le reconnaître dans l'adresse d'une page web : http://bla

HTTP veut dire Hypertext Transfer Procotol, soit « protocole de transfert hypertexte ».
Hypertexte, en raison des liens hypertextes qui pointent vers les ressources accessibles par HTTP.
On utilise donc HTTP à chaque fois que l'on visite une page Web.
Mais penchons nous encore un peu plus sur le sujet.

HTTP est apparu dans les années 89/90, sur une proposition de Tim Berners-Lee, aujourd'hui président du W3C, l'organisme qui produit des recommandations qui servent de standards pour le Web (XML, HTML, CSS entre autres).
Comme pas mal de protocoles il en existe plusieurs versions.

La première version est appelée HTTP/0.9, et la version 1.0 est devenue un standard IETF en mars 1996. Elle est definie dans la RFC 1945.

La norme actuelle est HTTP/1.1 et elle est décrite dans les RFC 2616 et 2068

Ce sont les documents à lire pour tout savoir sur HTTP (mais c'est pas grave si vous ne les lisez pas ;) )

20:53@skateinmarsun detail a clarifier sur ce point ?
20:53 waloo*Sir* TBL
20:53@skateinmars(RFC = Request For Comments)
20:54 UggyCa roule...
20:54 waloohttp evolue encore, y'aura un 1.2 ? un 2.0 ?
20:54 cemoic'est bon :)
20:54@skateinmarswaloo: moui si on veut, avec ses 2 prenoms et tout aussi ;)
20:55 termitorwaloo: le 1.1 est suffisant, pour le momment, mais il est possibile qu'un autre protocole suplante le http un jour
20:55@skateinmarswaloo: je n'ai pas vu d'évolutions a l'ordre du jour mais rien n'est a exclure

Comme vous avez pu le remarquer lors de l'utilisation de telnet, HTTP utilise par défaut le port 80.

Votre navigateur le sait et c'est pour cela que vous n'avez pas à taper http://www.google.fr:80/ (vous pouvez néanmoins essayer, ca marche).

Quand on utilise HTTP, il faut définir deux choses essentielles : la ressource sur laquelle on agit, représentée par l'url, "/bob" par exemple.
(pas exactement l'url en fait...) Puis la méthode à utiliser.

Il y a plusieurs méthodes disponibles, la plus utilisée étant GET. C'est celle que les navigateurs utilisent pas défaut quand vous cliquez sur un lien ou tapez l'adresse d'un site à consulter.

Une autre méthode, très utilisée, et la méthode POST. Elle est souvent utilisée avec des formulaire, pour envoyer un message sur un forum par exemple.

Ceux qui ont deja touché à PHP ou au développement web connaissent ces deux méthodes, il y en a d'autres mais elles sont beaucoup moins courantes : HEAD, PUT, DELETE etc...

20:57@skateinmarsOk ?
20:57 asimbonangaskateinmars: si http:// c'est le protocole, rajouter www juste après c'est pour au cas où on n'aurait toujours pas compris qu'on est sur le net avec ce protocole ? ^^
20:58 walooasimbonanga: le www ,'est pas obligatoire...
20:58@skateinmarsasimbonanga: c'est juste une convention, assez inutile, et pas du tout necessaire
20:58 Uggyasimbonanga: www c'est le nom du serveur... tu peut l'apeller comme tu veux
20:58 crevettenon, c'est le nom du hostname du server
20:58@skateinmarshttp://no-www.org/ ;)
20:58 walooou pas :)
20:58@skateinmarscrevette: pas forcement
20:58 The_Maraudermachine.ledomaine.fr
20:58 termitorwaloo: je confirme , il y a un bxxp et beep , comme protocole (c un protocole connecter, bidirectionnel)
20:58 crevetteskateinmars: euh ouais ca peut etre un alias
20:59 waloook merci termitor
20:59 asimbonangadonc le www c'est juste redondant
21:00@skateinmarsvoila, mais les sous domaines (truc.domaine.tld) sont utiles

Reprenons telnet.

telnet test.skateinmars.net 80
GET /test/test.txt HTTP/1.0
Host: test.skateinmars.net
Connection: close

Vous obtenez la ressource test/test.txt, qui est un simple fichier texte, après avoir utilisé la méthode GET.
Vous avez également utilisé HTTP en version 1.0

21:02@skateinmarsun probleme ici ?
21:02+gpocentekpas ici
21:02 UggyCa roule...
21:02 waloopas de bleme
21:02 cemoiok
21:03@skateinmars(je viens de m'apercevoir qu'il y aurait du y avoir un Keep-Alive sur l'autre requete mais c'est pas grave ^^ )
21:03 walooc'est quoi le Connection: close ?
21:03 b52Bonsoir
21:03 Uggyasimbonanga: y a des sites sans www (adsl.free.fr meteo.tf1.fr etc..)
21:03 Uggywaloo: tu le tape pas...
21:04+racoon97Message indiquant la fermeture de la session telnet
21:04 waloosi je le tape pas ça fait pareil :)
21:04@skateinmarson va voir l'utilité de connection

refaites donc les etapes precedentes, mais Pour Connection, utilisez

Connection: keep-alive

vous pouvez voir que telnet reste connecté au serveur et vous pouvez ainsi envoyer une autre requete

21:05 tetsuo44Uggy en premier (aprés le protocole) c'est le nom de serveur .... www trucmuche ou autre on verra ça aprés

analysons un peu plus ce que l'on vient de faire :

L'option Connection permet de spécifier si l'on veut rester connecté au serveur après avoir recu la ressource ou si l'on souhaite se déconnecter.
(on peut voir la différence avec keep-alive)
Il y a bien d'autre options disponibles, chacune étant un "en-tête".

On termine la requête par une ligne vide.

21:08@skateinmarsok ?
21:08 cemoi_ok
21:08+gpocentekskateinmars: le keep-alive garde pas la connection indéfiniment, si ?
21:08 waloogpocentek: y'a un timeout visiblement
21:08+gpocentekle serveur a l'air de clore la session
21:08 crevettenon
21:09+gpocentekok
21:09 walooj'ai découvert une commande GET dans mon shell du coup :)
21:09@skateinmarsgpocentek: non, cela dépend des autres en-tetes que l'on peut specifier comme Keep-Alive
21:09 Uggyskateinmars: le serveur qui recoit pas de "Connection" prend ca comme un Connection: Close dans le protocole ?
21:09+gpocentekok
21:09@skateinmarsAinsi que de la configuration du serveur
21:09 crevettehttp://httpd.apache.org/docs/1.3/keepalive.html
21:10@skateinmarsUggy: il me semblait que oui jusqu'a il y a quelques minutes ^^'
21:10 Uggyskateinmars: pkoi "jusqu'a il y a quelques minutes" ?
21:11@skateinmarsUggy: la derniere fois que j'ai testé sans spécifier Connection, je restai connecté, mais pas ce soir
21:11 Uggyskateinmars: aah ok :) ..bon...
21:11 walooskateinmars: ça dépend de la versio du protocole : 1.1 => keep-alive par défault, 1.0 => close
21:12 waloo(il me semble)
21:12 Uggywaloo: bien vu !!! :)
21:12 crevetteApache 1.1 comes with Keep-Alive support on by default,
21:12@skateinmarswaloo: mmhh en effet je viens de voir ca
21:14@skateinmarson va continuer

Regardons maintenant les quelques lignes renvoyées par notre action :

HTTP/1.1 200 OK

Ici on peut voir le protocole utilisé, et le code de retour.
Le code de retour est très important, il nous permet de savoir si la requête a reussi ou non.

Ici le code est 200, soit OK.
Le code 200, vous le recevez à peu prêt tout le temps, il signifie que la requête a réussi.

Bien sur vous ne le voyez pas dans votre navigateur puisque celui-ci affiche la ressource recue (ce qui vous interresse plus d'habitude que de savoir simplement si elle a été recue !)

Si vous êtes curieux vous pouvez essayer un telnet sur une ressource non existante, et vous verrez le code 404 bien connu qui signifie que la ressource n'existe pas.

Les codes d'erreur en 2XX sont des codes de réussite, en 3XX ce sont des redirections, en 4XX des erreurs de requête et en 5XX des erreurs du serveur.

Une liste de tous les codes est bien sur dispo dans la RFC.

21:15@skateinmarsok ?
21:15 tetsuo44vivi
21:15+gpocenteklimpide

Passons aux autres lignes :

Server: Apache/2.2.3 (Debian) DAV/2 SVN/1.4.2 mod_python/3.2.10
        Python/2.4.4 PHP/5.2.0-8+etch7 proxy_html/2.5 mod_ssl/2.2.3
        OpenSSL/0.9.8c

C'est simplement le nom et les informations sur le serveur qui vous a répondu. Ici Apache version 2.2.3.

On peut configurer son serveur pour cacher ces options et éviter les crackers qui recherchent une version précise d'apache vulnérable à certaines failles. (notez qu'il vaut mieux corriger la faille dans ce cas ;) )

Last-Modified nous donne la date à laquelle la ressource a été modifiée pour la dernière fois
ETag: représente un identifiant du fichier

Ces deux options permettent au navigateur de les comparer avec les fichiers qu'il a dans son cache pour ne pas retélécharger inutilement un fichier qu'il a déjà demandé auparavant.

Content-Length définit la taille du contenu que le serveur vous envoie, et
Content-Type, c'est le type MIME du contenu (texte, image etc...)
21:18@skateinmarsdes questions sur ce point ?
21:18 cemoi_c'est ok
21:19@skateinmarsnotez qu'il est un peu bête de se servir de ETag et Last-Modified si l'on télécharge tout de même la ressource
21:20@skateinmarson peut donc utiliser HEAD au lieu de GET pour demander ce genre d'infos
21:21@skateinmarsbon, ca a l'air ok ;)
21:21+gpocentekouep :)

Voila le topo basique sur HTTP, avec ca vous pouvez jouer un peu sur les sites que vous connaissez, et bientôt sur votre propre serveur :)

http://fr.wikipedia.org/wiki/HTTP vous permet d'aller plus loin si la RFC vous donne des boutons.

Je n'ai pas parlé de HTTPS, celui-ci est la variante de HTTP qui utilise SSL pour sécuriser les échanges. Il utilise le port 443.

Passons à Apache

Apache

On va donc installer le serveur "Apache HTTP Server", qui est le plus connu des serveurs web et le plus utilisé.

Il a été concu en 1995 a partir d'une série de patchs sur le serveur NCSA HTTPd, un des premiers serveurs existants, d'ou son nom : "A patchy server" (qui ressemble a la prononciation d'Apache en anglais)

C'est un logiciel libre, distribué sous la licence Apache, version 2.0

La version courante est la 2.2.6, et 1.3.39 pour la branche "legacy" 1.X qui est parfois préférée pour éviter de migrer d'une branche à l'autre.

Nous allons utiliser la version 2.X, n'ayant pas de contraintes à ce niveau.

L'Installation :

Je part du principe que vous avez une machine sous ubuntu ou debian sous la main, et nous allons donc utiliser apt-get.

Ouvrez une console et installez apache avec la commande suivante :

sudo apt-get install apache2 apache2-mpm-prefork
(ou utilisez su, ou synaptic...)
Cela vous installera peut-etre d'autres packages 21:28 * Sp4rKy sort
21:24@skateinmarstenez moi au courant lorsque cela sera terminé :)
21:25+gpocentekok ici
21:25 Uggyskateinmars: Tu sais comment est "généré" le ETag: ?
21:25@skateinmarsUggy: une doc de yahoo sur le sujet : http://developer.yahoo.com/performance/rules.html#etags
21:26 Uggyskateinmars: merci m'sieur
21:26@skateinmarsd'origine avec apache il semble qu'ils le generent depuis son inode
21:26@skateinmarsThe ETag format for Apache 1.3 and 2.x is inode-size-timestamp.
21:27 Uggyskateinmars: ok.. je lirais ca merci... ;)
21:27@skateinmars:)
21:27@skateinmarsil y a des gens qui n'ont pas fini d'installer apache ?
21:28+Sp4rKyceux là devraient penser à lighttpd
21:28@skateinmars(vous pouvez ignorer ce grossier personnage)
21:28+Sp4rKy
21:28 crevette:)
21:28@skateinmarson continue donc
21:28 cemoi_c'est quoi la difference entre apache2 et legacy
21:28 cemoi_l'histoire de la mise à jour?
21:29@skateinmarscemoi_: la version 1.X est plus ancienne mais toujours maintenue
21:29 cemoi_ok
21:29 Uggyla branche 1.x est toujours maintenue ?
21:29@skateinmarscomme pour les noyaux 2.4 et 2.6
21:29 Uggyok
21:29@skateinmarsUggy: oui mais juste pour les bugfixes et probs de securité

Vous pouvez donc voir une fois cela terminé qu'apache a été démarré :

* Starting web server (apache2)...

Vérifions son bon fonctionnement, en ouvrant votre navigateur et vous rendant sur http://localhost/

Vous verrez une page vous informant que le serveur marche correctement :)

Maintenant que le serveur est installé et marche correctement, nous allons voir les bases à connaître de sa configuration.

Le répertoire /etc/apache2/

Rendez-vous dans le répertoire /etc/apache2/, et regardez les fichiers le composant :

apache2.conf  conf.d  envvars  httpd.conf
  mods-available  mods-enabled  ports.conf  sites-available
  sites-enabled

La plupart de ces fichiers sont plus ou moins spécifiques à debian/ubuntu et nous permettent de séparer la configuration en plusieurs parties.

Voyons donc ces fichiers :

httpd.conf est le fichier utilisé par apache1, il est conservé vide dans apache2 pour assurer la rétrocompatibilité. On en aura pas besoin.
envvars est utilisé pour définir des variables d'environnement propres à apache. Je ne m'en suis jamais servi...
ports.conf est plus interressant. Regardez son contenu :
Listen 80

Cette option de configuration (appelée directive) demande à apache d'écouter sur le port 80. Si vous utilisez HTTPS vous aurez à y spécifier le port 443.

Bien sur on peut utiliser n'importe quel port mais restons dans les normes

apache2.conf Ceci est le fichier principal de configuration, on y reviendra plus tard
conf.d est un répertoire qui contient plusieurs petits fichiers qui seront analysés par apache.

Le seul fichier pour le moment est charset, qui spécifie le charset à utiliser par défaut.

Vous pouvez y ajouter d'autres fichiers du même genre pour éviter d'encombrer le fichier principal.

mods-available contient la liste des modules d'apache installés, et
mods-enabled les modules activés.
sites-available et
sites-enabled contiennent la liste des vhosts à utiliser, on y reviendra.
21:34@skateinmarsquestions ?
21:34 shadok'lu skateinmars :D
21:35+gpocentekpas de questions pour moi
21:35 UggyCa roule..
21:35 shadokbien le sujet du cours ca va accompagner mon repas, pas de question sinon :)
21:35 waloook
21:35@skateinmarsok on reprend donc

Le fichier /etc/apache2/apache2.conf

Ouvrons maintenant, avec les droits root, le fichier apache2.conf

Vous pouvez voir qu'il est allègrement commenté. Un commentaire commence par # et le texte qui suit est ignoré par apache.

Voyons un peu les premières options :

  ServerRoot "/etc/apache2"

Cette option définit le dossier de base qui contient la configuration d'apache. A ne pas toucher donc.

LockFile, PidFile, si vous ne comprenez pas les commentaires vous n'avez pas besoin de savoir à quoi ca sert ;)

Timeout. Enfin une option interressante. C'est le nombre de secondes maximum au bout duquel une connection au serveur est interrompue

KeepAlive. On a vu son utilité tout à l'heure, vous pouvez ici le désactiver. Il y a également d'autres options pour KeepAlive pour affiner cette option.

On va zapper les options dans les blocs IfModule, néanmoins vous pouvez ici voir un bout de configuration typique d'apache, entre balises.

User et Group déterminent l'user avec lequel seront exécutés les processus d'apache.

On va arreter la, vous devez avoir une idée d'à quoi servent les options en lisant les commentaires associés.

Regardons tout de même la ligne 184 et suivantes, qui vous confirment que les fichiers ports.conf et autres sont pris en compte.

Bien sur vous pouvez désactiver certains fichiers pour faire un peu de menage, comme httpd.conf
(Personellement j'ai déplacé le fichier ports.conf dans le répertoire conf.d mais à chacun ses manières.)

21:38@skateinmarsquestions ?
21:38 shadokca drop les droits a un autre user le user et group ?
21:39 shadokc'est bien ca ?
21:39@skateinmarsoui
21:39 shadoknickel
21:39@skateinmarsenfin il y a un processus maitre qui reste root, et lance d'autre procs/threads avec moins de droits
21:39 shadokhmm ok, ca reduit la surface d'attaque quand meme quoi
21:39@skateinmarsvous pouvez verifier avec un ps aux|grep apache :)
21:40 waloole maitre ne répond pas aux requetes http j'imagine
21:40@skateinmarswaloo: non en effet
21:40@skateinmarsContinuons

Le répertoire /etc/apache2/sites-available

Voyons maintenant le répertoire sites-available. Il contient les différents vhosts que vous utiliserez.

Les vhosts (Virtual Hosts) vous permettent de définir plusieurs sites différents sur une même machine, le plus souvent des sous-domaines (www.chose.fr, machin.chose.fr...)

Le fichier /etc/apache2/sites-available/default

Éditez le seul vhost existant pour le moment : default

NameVirtualHost définit les IPs à utiliser par apache, ici * signifie qu'on utilise n'importe quel IP pour acceder au serveur : 127.0.0.1 (ip locale), 192.168.x.x (ip du reseau local), ou une IP externe.

Cette directive est en dehors du Vhost, on pourrait donc la déplacer dans apache2.conf. Dans tous les cas elle ne doit pas être reprise dans les autres vhosts si elle est déjà définie à *

Ensuite vient le vhost proprement dit : il est compris dans un bloc , un peu à la manière d'une balise XML.

Ces blocs définissent la "portée" de la validité des directives qui y sont définies.

Le * derrière VirtualHost définit ici également que le vhost est valable pour toutes les IPs sur lesquelles apache écoute.

La directive ServerAdmin vous permet de spécifier un email à utiliser en cas de problème, sur une page d'erreur 404 par exemple.

Il manque une directive importante que l'on va ajouter :

ServerName machin

Remplacez machin par le nom que vous souhaitez utiliser pour le vhost. Si vous possedez un compte dyndns ou d'un service du genre vous pouvez l'utiliser, sinon mettez un peu n'importe quoi comme truc.com

21:43@skateinmarsok ?
21:43+gpocentekouep
21:44 animimotusskateinmars: pkoi pas dans apache2.conf ?
21:44@skateinmarsanimimotus: pour utiliser un vhost justement
21:45@skateinmarstu peut appliquer ces parametres en dehors d'un vhost mais ils seront appliqués sur le "vhost par defaut"
21:45@skateinmarsensuite :

DocumentRoot définit le dossier dans lequel seront stockés les fichiers du site.

Les sous-blocs suivants définissent des options spécifiques au dossier du site.

Options FollowSymLinks par exemple demande à apache de suivre les liens symboliques si necessaire,

21:45 cemoi_on lem et n'importe ou ça?
21:46 cemoi_le ServerName machin
21:46@skateinmarscemoi_: non, dans le bloc du Vhost
21:46@skateinmarsaprès serveradmin par exemple
21:46 cemoi_ok mais n'importe ou ds le bloc
21:46@skateinmarsoui
21:46 cemoi_ok

AllowOverride permet de définir si l'on peut changer certaines options en utilisant des fichiers .htaccess dans le répertoire du site

Indexes permet d'autoriser le listage de fichiers d'un répertoire qui ne contient pas d'index.
(un exemple de listage : http://test.skateinmars.net/test/ )

Je passe le reste qui est assez explicite, ou pas assez interressant.

Voyons simplement Alias, qui permet de définir un répertoire précis pour certaines requêtes.

Ici /doc correspondra au dossier /usr/share/doc/, mais comme le montre Allow seul les IPs locales y ont accès.

21:47@skateinmarsok ?
21:48+gpocentekouep
21:48+gpocentekça permet par exemple d'accéder à toutes la doc des paquets debian en allant sur http://localhost/doc, c'est ça ?
21:48+gpocentektoute*
21:48@skateinmarsvoila
21:49+gpocentekça tue
21:49+gpocentekskateinmars: mode -m ;)
21:49@skateinmarsenfin non, plutot http://localhost/doc/ ;)
21:49-!-mode/#ubuntu-fr-classroom [-m] by skateinmars

Enregistrons les changements et fermons le fichier.

Il faut maintenant que le vhost soit actif.

Pour activer un vhost il faut créer un lien symbolique du fichier vhost vers le dossier sites-enabled/, mais une commande est la pour nous aider dans cette tâche.

(Tout d'abord faites un sudo rm sites-enabled/000-default, c'est une configuration d'origine d'apache plus génante qu'autre chose.)

c'est un lien symbolique sur /etc/apache2/sites-available/default

Utilisez donc "sudo a2ensite nomduvhost". Notez que a2dissite va logiquement réaliser le contraire. Cette méthode du lien symbolique permet de réaliser rapidement des changements dans la configuration d'apache.

21:51 waloosudo a2dissite 000-default, non ?
21:51 waloodu coup...
21:51@skateinmarswaloo: non ca on vient de le supprimer
21:52 waloooui, mais poruqoi avec rm ?
21:52 shadok(apache2 a l'air plus sympa que le 1 coté config, je suis obligé de lacher là :p pas grave ca loggue)
21:52@skateinmarsnormalement il doit y avoir le même nom dans sites-available et sites-enabled mais par defaut debian/ubuntu renomme le lien en 001-default
21:52@skateinmarsdu coup on vire ce lien et on en recrée un avec a2ensite
21:52 waloook

Comme vous l'indique le résultat de la commande, vous devez recharger la configuration d'apache avec un

sudo /etc/init.d/apache2 reload

Vous devrez recharger apache à chaque changement de configuration. Notez aussi l'option force-reload du script.

Petite note aussi, vous pouvez utiliser sudo invoke-rc.d apache2 reload, c'est selon les goûts :)

Après cela votre vhost est actif. Reste encore une modif à faire : ouvrez le fichier /etc/hosts, et entrez une nouvelle ligne :

127.0.0.1 nomduvhost

Avec nomduvhost le ServerName que vous avez choisi. Cela permettra à votre système de faire la correspondance entre le nom de l'host et votre machine locale.

21:55@skateinmarsok ?
21:55+gpocentekouep
21:56 * gpocentek est fier d'hoster machin.com sur sa machine ^^
21:56@skateinmars:)
21:56 Uggyca roule ...
21:56@skateinmarsTestez maintenant votre vhost ! Ouvrez votre navigateur (ou telnet :) ) et entrez votre ServerName dans la barre d'adresse. Ca devrait marcher :)
21:56 animimotussudo a2ensite default refait le 000-default ^^
21:56 Uggya2ensite c'est "special" Ubuntu a priori ? (ou debian) c'est pas "apache" ?
21:57 waloooui, a2ensite fait des 00x-nomvhost
21:57@skateinmarsUggy: special debian oui
21:57 Uggyskateinmars: ok merci..
21:57@skateinmarswaloo: euh non justement :]
21:57+gpocentekah...
21:58+gpocentekc'est ce qu'il a fait ici il me semble
21:58@skateinmarswaloo: ca utilise le même nom pour le lien que le nom du fichier
21:58@skateinmarsah ?
21:58+gpocentekil m'ajoute le 000-
21:58 waloooui, pareil
21:58+gpocentekskateinmars: ah non
21:59@skateinmarsah oui si :)
21:59+gpocentekil le faut que si le fichier s'appelle 'default'
21:59+gpocentekavec 'foobar' le lien s'appelle 'foobar' aussi
21:59 walooha oui tiens
21:59+gpocentekgauvain@joe:/etc/apache2$ ls sites-enabled/
21:59+gpocentek000-default foobar
21:59@skateinmarsok, ca doit être l'exception qui confirme la regle
21:59+gpocentekhehe :)
22:00 animimotus(y raconte que des conneries le skateinmars :p)
22:00@skateinmarsnotez que si on demande un Host qui n'est pas specifié dans les vhosts il utilisera le premier vhost inteprété si on a rien précisé en dehors des vhosts
22:00 walooa2ensite est pas trop documente...
22:00 Neoxygenun peux agitée la classe
22:01-!-mode/#ubuntu-fr-classroom [+m] by skateinmars

22:01+gpocentek(en tout cas apache marche bien ici :) ) 22:01@skateinmarson reprend :) 22:01@skateinmarsca serait mieux si on rajoutait une page. Téléchargez la source du fichier d'index que l'on a vu tout à l'heure (http://test.skateinmars.net/) et enregistrez la dans /var/www/index.html 22:01@skateinmarsRechargez la page, et admirez le résultat.

22:02-!-mode/#ubuntu-fr-classroom [-m] by skateinmars
22:02 Uggyc'est quoi le "premier vhost" ? en fonction du nom c'est ca ?
22:03@skateinmarsUggy: oui voila, d'ou le hack avec 001-default
22:03 Uggyok..c'est pour confirmer ;)
22:03@skateinmarsnotez que sous apache 2 les pages a utiliser comme index sous spéficiées dans le module dir
22:03@skateinmars(mods-available/dir.conf)
22:04@skateinmars(mmh, pas sous apache forcément, plutot sous debian)

On a donc maintenant un apache fonctionnel, mais on va terminer avec un petit bonus et installer mod_php histoire de connaître les modules.

Les modules

Les modules sont des extensions d'apache qui rajoutent des fonctionnalités diverses, du support d'un langage aux réécritures d'urls.

On va ainsi installer mod_php5 qui rajoutera comme son nom l'indique le support de php5 directement dans apache.

Installez le paquet libapache2-mod-php5, attendez le redemarrage d'apache, et voila :)

22:06@skateinmars(notez qu'apache devrait recharger sa configuration une fois le module installé)
22:06 cemoi_installez? pat-get insatll?
22:06 cemoi_apt-get*
22:06+gpocentekcemoi_: oui
22:06@skateinmarscemoi_: sudo apt-get install libapache2-mod-php5
22:06 cemoi_ok ok
22:07@skateinmarsquelqu'un n'a pas terminé ?
22:08 UggyCa roule...
22:08 cemoi_ok

On va vérifier que cela marche. regardez le dossier mods-enabled, vous pourrez y voir un php5.conf et php5.load.

La aussi, il s'agit de liens symboliques vers mods-available comme pour les vhosts, et vous devinerez l'utilité de a2enmod et a2dismod :)

Créez ensuite le fichier /var/www/test.php, et écrivez-y le contenu suivant :

<?php phpinfo(); ?>

Ouvrez ensuite cette page dans votre navigateur (http://servername/test.php)

Vous y verrez la page interprétée (la fonction phpinfo affiche une page html d'informations sur votre installation de php)

22:10@skateinmarsok ?
22:10 cemoi_ouep
22:10+gpocentekROCK ON
22:11@skateinmars(remarquez que gpocentek est très motivé pour apprendre le php)
22:11+gpocentekà mort :/
22:11@skateinmars:)
22:12 waloozut j'ai installé libapache2-mod-python à la place (un vieux reflexe :)
22:12@skateinmarsbon hé bien c'est fini :]
22:12+Sp4rKyouaihhh
22:12@skateinmarswaloo: tant que c'est pas mod_perl ca va ;)
22:12 * gpocentek hugs skateinmars
22:12+Sp4rKybravo
22:12 walooskateinmars: un mot sur la protection des pages ?
22:12+Sp4rKy*claps* *claps*
22:12@skateinmarshé euh la conclusion ;)
22:12 cemoi_merci!

(petite conclusion :) )

Voila, avec ceci vous avez un environnement quasiment prêt pour du développement web, il vous suffira d'installer une base de donnée et phpmyadmin si nécessaire.

Il vous faut néanmoins savoir qu'apache n'est pas _le_ serveur web le meilleur, même s'il est de très grande qualité.

Après avoir un peu touché à apache je vous conseille d'aller tester d'autres serveurs tels que lighttpd, nginx ou cherokee, et d'explorer des configurations basées sur fastcgi, ne serait-ce que par curiosité.

N'oubliez pas non plus que même si on voit souvent apache, php et mysql ensemble il ne sont aucunement liés, n'hésitez donc pas à tester les langages python, ruby (et rails) ou encore le SGBD postgresql.

Sources et liens

http://httpd.apache.org/docs/2.2/

http://www.ietf.org/rfc/rfc2068.txt

http://www.ietf.org/rfc/rfc2616.txt

Pour s'amuser avec les headers HTTP :

http://www.xml.com/pub/a/2004/12/15/telnet-REST.html

http://www.nextthing.org/archives/2005/08/07/fun-with-http-headers

Voila, merci :)

22:14 UggyAlors c'est quoi le meilleur pour ton utilisation ? :)
22:14@skateinmarsUggy: dans ma boite on utilise nginx, ca marche super pour php et rails :)
22:14 animimotustain j'ai rien appris :\
22:14 Uggyskateinmars: ok :)
22:15 waloomoi si :)
22:15@skateinmarswaloo: tu veut un point sur les htaccess ?
22:15 cemoi_mais en producatiob là la config ça le fait pas si? niveau sécurité?
22:15 walooskateinmars: si quu'un demande, ourquoi pas
22:15 waloomoi je connais
22:15+gpocentekcemoi_: pourquoi donc ?
22:15 shadokc'est pas lighttpd qui gere pas les .htaccess ?
22:15 cemoi_bé je sais pas je demande
22:16@skateinmarsshadok: nginx ne les gere pas mais c'est pas très grave selon le contexte
22:16 cemoi_si non c'est trop simple là... la config du serveur
22:16+gpocentekcemoi_: je pense pas qu'il y ait de problème là...
22:16 shadokavec une debian hardened saimieu cemoi_
22:16 shadokskateinmars: hmm ok, je connaissais meme pas celui là
22:16+gpocentekskateinmars: tu peux nous dire comment on cache les détails du serveur ?
22:16@skateinmarscemoi_: ca va la, il ne devrait pas y avoir de problemes si on tiens son apache a jour, qu'on abuse pas du chmod a tout va et qu'on troue pas ses scripts
22:17+gpocentekapache x.y.z mod_python blabla & cie
22:17 cemoi_ok shadok mais es qu'il faut psychoter niveau sécurité?
22:17@skateinmarsshadok: un serv russe :}
22:17 shadokcemoi_: toujours, pourquoi ? :D
22:17 cemoi_pour le php par exemple
22:17 shadokskateinmars: c'est sensé rassurer ? ^^
22:17@skateinmarsgpocentek: ServerSignature Off
22:17 cemoi_faut pas bloquer certaine fonctions?
22:17 shadokgpocentek: cacher les details je vois pas trop l'utilité :)
22:18 shadokcemoi_: faut surtout faire gaffe aux droits des dossiers
22:18 waloocemoi_: si tu fais de l'hébergement ça se fait, si tu as confiance en les développeurs sur ton site, c'est pas utile
22:18+gpocentekshadok: pour rendre les listes plus belles :p
22:18@skateinmarsgpocentek: mmh ca c'est pour les listages et autres pages d'apache, pour les headers : ServerTokens
22:18 shadokgpocentek: huhu
22:18@skateinmarsgpocentek: le tout est commenté dans apache2.conf :) ligne 207
22:19 cemoi_set_time_limite par exemple
22:19+gpocentekok
22:19 shadok(http://en.wikipedia.org/wiki/Security_through_obscurity en passant)
22:19@skateinmarscemoi_: ca c'est pour php
22:19 animimotusServerTokens Prod dans apache2.conf
22:20 cemoi_oui je sais justement quand on install php5 toutes les focntions sont activées
22:20 cemoi_non?
22:20 waloonon
22:20 cemoi_à...
22:20@skateinmarsoui, ca se configure dans /etc/php5/apache2/php.ini
22:20 waloocertaines bibliothèques sont dans d'autres packages
22:21@skateinmarswaloo: toutes les fonctions de bases sont la
22:21 waloooui, de base
22:21 cemoi_waloo, je comprends mais déja avec la base...
22:22 waloomais par exemple pour connecter une base mysql, faut un le paquet php5-mysql
22:22@skateinmarscomme readfile, fopen, exec etc waloo :)
22:22 waloooui, ça ok
22:22 cemoi_c'est que tres souvent sur les serveurs ils bloquent les fontions les plus intéréssantes mais aussi les plus dangereuses pour leur serveurs...
22:22@skateinmarsoui oui après pas de mysql, mais on peut tres bien utiliser postgresql ;)
22:22 waloosur les serveurs d'hébergement mutualisé, oui
22:22+gpocentekou sqlite :)
22:23+gpocentek(comment ça c'est pas bien)
22:23 cemoi_sur les mutualisé ouai...
22:23 * waloo utilise eXist
22:23 waloocomme bd
22:23 cemoi_au fait chez ovh ils ont ssh mais on peux pas faire de rsync...
22:23 cemoi_sur les mutuaisé je parle
22:24 cemoi_mutualisé*
22:24 shadoka voir leur conf gentoo chez ovh c'est pas etonnant
22:24 shadokc'est des burnes coté config (le reste je sais pas mais j'ai pas specialement envie de savoir)
22:24 cemoi_le rsync il marche juste de serveur à serveur et que les leurs évidament
22:25 cemoi_j'ai pas trouvé d'hébergeur capable de me proposé la possibilité de faire du rsync... sauf sur serveur dédié
22:27 shadokperso si je loue un server c'est du dedié ou rien mais pour le moment j'ai vraiment pas l'utilité
22:27@skateinmarsshadok: tu peut mettre un serv chez toi aussi ;)
22:27 cemoi_bé un dédié c'est énorme...
22:27 cemoi_un serv chez sois ça rame vu les adsl...
22:27 waloocemoi_: pas forcement
22:28 shadokj'ai déjà un server ssh chez mes darons mais pour le moment j'ai pas d'autre besoin, ptet un dns un jour ^^
22:28@skateinmarscemoi_: tu crois que skateinmars.net est ou ?
22:28 walooy'a des 'petits' dédies (kimsuffi, dedibox)
22:28 Uggyil faut un "dédié" partagé.. :)
22:28 cemoi_waloo, bé eee 160go c'est énorme
22:28@skateinmarset j'ai vu personne s'en plaindre encore ;)
22:28 shadokcemoi_: bof ca me va tres bien, y a pas assez de bons films pour que c a me coute 30€ par mois
22:28@skateinmarsUggy: avec une 30aine de potes ? :)
22:29 Uggyskateinmars: on est ... 8 ? :)
22:29 walooUggy: ben y'a des vds aussi
22:29 shadokparlant de ca j'ai deux heroes a voir moua :p
22:29@skateinmars:)
22:29 waloodédié mutualisés
22:29 cemoi_skateinmars, t'a quoi comme ligne adsl?
22:29 Uggyskateinmars: mais 4 "présents" :)
22:29@skateinmarsUggy: j'espere que tu as pas perdu ton temps ce soir :]
22:29 cemoi_waloo, ça dois douiller tout ça no?
22:30 waloola dedi une 20 € / mois
22:30@skateinmarsUggy: j'ai honteusement copié ton systeme "moitie protocole et joujou avec telnet, moitie soft" :)
22:30 Uggyskateinmars: bah j'ai appris par exemple d'ou venait le nom apache :) (A patchy... ) :)
22:30@skateinmars^^
22:30 cemoi_ok
22:30 Uggyskateinmars: T'as super bien fait ... :) c'etait nickel :)
22:31 walooc'est vrai que le ncsa httpd a bien été patché depuis :)
22:32 cemoi_ça ressort quelque part les cours d'ici?
22:32 Uggyen parlant de joujou avec telnet... pour ceux qui connaissent pas -> "rlwrap"
22:32 Uggypermet d'avoir un historique virtuel a l'interieur du telnet
22:33 UggyBon bahh un grand merci a skateinmars pour avoir préparé ce cours !!!! :)
22:33 shadokcemoi_: ici j'ai du 8M/1M et du 2M/256K chez les darons, c'est amplement suffisant pour ce que je fais. apres le jour ou j'aurais le temps je monterais un vpn entre les deux
22:33 cemoi_yes
22:33@skateinmarsde rien :)
22:33 Uggyclap clap clap
22:34 cemoi_c'est bien cool
22:34@skateinmarsUggy: oui merci pour rlwrap je l'ai pas mal utilisé pour preparer ce cours :]
22:34 Uggyau fait qqun a pris les logs ?
22:34@skateinmarsSp4rKy: a loggué normalement
22:34 cemoi_cemoi2005.serveftp.net
22:34 Uggyskateinmars: ok ;)
22:34 cemoi_hu hu
22:34 cemoi_;)
22:35 shadokje les ai sinon
22:35 shadokbon, a + les gens et bonne soirée, ptet a un de ces 4 skateinmars :)
22:35@skateinmarsbonne soiree shadok :)
22:35 shadokmerki
22:37 cemoi_elle marche cette url?
22:37 cemoi_http://cemoi2005.serveftp.net
22:37 Uggynon... netFilter ?
22:38@skateinmarsrouteur qui bloque
22:38 cemoi_à bon?
22:38 Uggyouep ou NAT...
22:39@skateinmarsle ping est bloqué déjà
22:39 cemoi_à ouai...non non je fait ça à partir d'une machine virtuel
22:39 cemoi_ouai mais le ping ça géne pas
22:39 cemoi_si?
22:39 Uggynon
22:39@skateinmarsca a quand meme son utilite :)
22:40 cemoi_pour connaitre les ports ouvert :d
22:40@skateinmarsnon c'est pas lié
22:41 UggyPing=ICMP.. donc pas de ports TCP/UDP