Apache Web Server Internals

Structure et Configuration

Neil Armstrong 10 juin 2008

Intellicore Tech Talks
• Des conférences pour partager son savoir • Le mardi au CICA Sophia Antipolis • http://techtalks.intellicore.net • Aujourd’hui la 10ème conférence • Vous voulez participer ? • techtalks@intellicore.net

Neil Armstrong - Étudiant Ingénieur Polytech’Nice-Sophia 10 juin 2008 - CICA Sophia Antipolis

APACHE WEB SERVER INTERNALS
Structure et Configuration

APACHE ?
FTP, Gopher, POP/SMTP NNTP

L’histoire commence en 1990 au CERN

Tim Berners-Lee Projet ATLAS Détecteur de Particules

Invention de l’HTML et du protocole HTTP Premiers Serveurs HTTP dont le : NCSA httpd Formation du groupe de développeurs Apache Mais pourquoi ce nom ?

HyperText Transfert Protocol

National Center for Supercomputing Applications

APACHE ?
A PAtCHy Server Proche de la prononciation de Apache en anglais Sources basées sur un ensemble de PATCHs Aujourd’hui la base du NCSA httpd a disparu des sources Sauf dans la configuration

PART DE MARCHÉ
Dés la première version, un succès Aujourd’hui, sert 49,41% des sites actifs IIS de Microsoft : 34,37% Google : 9,37% avec son serveur interne les autres serveurs se partagent 6,75% des sites

PARTS DE MARCHÉ
34000000

33,5M Apache 23,3M

17000000

Microsoft IIS Google 6,4M Autres
0

2

00 0

01 20

2

02 0

2

03 0

2

04 0

05 20

06 20

07 20

08 20

APACHE WEB SERVER
Son fonctionnement ?

EVOLUTION INTERNE
Basé sur NCSA httpd
inetd

Simple mais avec un processus unique Sortie de Apache 1.0 en 1995
HTTP1.1

Suite a une profonde refonte depuis NCSA httpd Sortie de Apache 2.0 en 2002
IPV6

Sortie de Apache 2.2 en 2005

ORGANISATION INTERNE
Un coeur et des modules

Requête Apache Core

Module Module Module

Réponse

MODULARITÉ
Le traitement d’une requête est découpé en une série d’étapes traitées par les différents modules

URI Fichier Authentification Permissions Type du fichier Envoi vers un module si besoin Réponse au client Stockage des erreurs éventuelles

GESTION SIMPLE DE RESSOURCES
Une corbeille de ressource est gérée dynamiquement Gestion mémoire simplifiée Efficacité de gestion Lors d’une requête une ressource est allouée suivra les étapes pendant la vie de la requête

RÉPARTITION DU TRAVAIL
Répartition du travail entre plusieurs tâches Gestion de la politique par des modules spécifiques MPM : Multi-processing Module 3 politiques possibles actuellement : Prefork : Multi-Processus UNIX Worker : Multi-Thread (Unix, Windows, ...) Event : Pool de Processus et Threads, expérimental

TRANSIT DES DONNÉES
seau

Les données de la requête sont stockées dans des équipe “Bucket”, l’ensemble est une “Brigade” Transitent entre les modules Ils peuvent ajouter des informations (En-têtes, ...) Ils peuvent en modifier (redirection, erreur, ...) Une API offre aux modules des méthodes flexibles et puissantes pour travailler avec les données

MODULES DE FILTRES
Modules de filtres Utilisés pour faire des actions sur les données Entrée : Décompresser, Décoder, ... Sortie : Compresser, Coder, ...

MODULES DE FILTRES
Modules de filtres Utilisés pour faire des actions sur les données Entrée : Décompresser, Décoder, ... Sortie : Compresser, Coder, ...

APACHE WEB SERVER
Qui s’en sert ? Comment ?

SITE PERSO
Site très simple 1 adresse = 1 site internet Pas de scripts dynamiques (php, ...) 1 seul hôte virtuel -> “catch-all” Typique des installations par défaut sous GNU/ Linux et Mac OS X

HÉBERGEMENT
Site internet dynamique avec sous-domaines 1 adresse IP = plusieurs nom de domaines et sites Utilisation d’un certain nombre d’hôtes virtuels 1 par sous-domaine (produits.mon-domaines.fr, ...) 1 “catch-all” généralement www.mon-domaine.fr Typique d’un site d’entreprise ou d’hébergement web

INFRASTRUCTURE WEB
Gros site d’entreprise dynamique Plusieurs adresses IP, plusieurs sous-domaines Utilisation de communications SSL Beaucoup d’hôtes virtuels Grosse infrastructure Java EE Plusieurs serveurs pour redondance

SOLUTIONS
Gestion d’hôtes virtuels Gestion de plusieurs sous-domaines sur le même serveur Gestion de “proxy” Renvoi de la requête vers un autre serveur Utilisé pour de la balance de charge Renvoi vers un micro-serveur web embarqué en Rails, Python, ...

BALANCE DE CHARGE
Utilise le module mod_proxy_balancer 2 algorithmes Request Counting Chaque serveur => même quantité de clients Weighted Traffic Counting. Chaque serveur => même quantité de données à traiter

APACHE WEB SERVER
Comment une requête est traitée ? Comment configurer ?

MODULES UTILES
Interpréteurs php, ruby, perl, python, ... CGI : Common Gateway Interface

Texte

Server Sides Includes URL Rewriting Authentification (plain, ldap, mysql, ...) Et beaucoup d’autres...

EXEMPLE SIMPLE
1 site internet en virtual host monsite.mondomaine.com La résolution du nom donne une adresse IP L’adresse rentrée sur le navigateur http://monsite.mondomaine.com/blog/index

REQUÊTE HTTP
Requête HTTP 1.1 1.0 obsolètes -> hôtes virtuels non pris en charge GET /blog/index HTTP/1.1 Host : monsite.mondomaine.com User-Agent : Mozilla/5.0 ... Autres en-têtes facultatives (Accept, Cookies, ...)

TRAITEMENT
Traitement du Host monsite.mondomaine.com Transformation de /blog/index Ex: /var/www/phpblog/index.php?p=index Type MIME : application/x-httpd-php Lancement de PHP Envoi de la réponse au client

RÉPONSE HTTP
Simple code d’erreur suivi d’en-têtes 200 OK 404, ... Type de contenu : Content-Type Taille du contenu Langage, Date de modification, Cookies, ....

CONFIGURATION
Configuration très modulable Du simple fichier unique httpd.conf A la structure complexe de répertoire Chargement dynamique de modules Syntaxe simple et puissante Documentation claire

EXEMPLE STRUCTURE

EXEMPLE STRUCTURE
/etc/apache2/

EXEMPLE STRUCTURE
/etc/apache2/ httpd.conf

EXEMPLE STRUCTURE
/etc/apache2/ httpd.conf sites-available/

EXEMPLE STRUCTURE
/etc/apache2/ httpd.conf sites-available/ sites-enabled/

EXEMPLE STRUCTURE
/etc/apache2/ httpd.conf sites-available/ sites-enabled/ mods-available/

EXEMPLE STRUCTURE
/etc/apache2/ httpd.conf sites-available/ sites-enabled/ mods-available/ mods-enabled/

EXEMPLE STRUCTURE
/etc/apache2/ httpd.conf sites-available/ default sites-enabled/000-default mods-available/ mods-enabled/

EXEMPLE STRUCTURE
/etc/apache2/ httpd.conf sites-available/ default sites-enabled/000-default

mod_php5.load mods-available/ mod_php5.conf mod_php5.load mods-enabled/ mod_php5.conf

EXEMPLE STRUCTURE
/etc/apache2/ httpd.conf sites-available/ default sites-enabled/000-default

mod_php5.load mods-available/ mod_php5.conf mod_php5.load mods-enabled/ mod_php5.conf

EXEMPLE STRUCTURE
/etc/apache2/ httpd.conf sites-available/ default sites-enabled/000-default

mod_php5.load mods-available/ mod_php5.conf mod_php5.load mods-enabled/ mod_php5.conf

HTTPD.CONF
Configurations classiques Nom du serveur Interface d’écoute E-Mail de l’administrateur Types MIME Comportements par défaut

000-DEFAULT
Définition du “catch-all” NameVirtualHost *:80 Balise <VirtualHost *:80> DocumentRoot /var/www/monsite ServerName monsite.mondomaine.com ServerAlias www.monsite.com monsite.com

MODULES
Séparation du chargement et de la configuration Chargement avec LoadModule LoadModule php5_module /lib/apache2/libphp5.so Configuration facultative Exemple PHP AddType application/x-httpd-php .php DirectoryIndex index.html index.php

CONFIGURATION CONDITIONNELLE
Permet d’exécuter des parties de configuration Si un module est chargé Si une variable est définie Associé a l’inclusion de fichiers Configuration puissante !

Des questions ?
MERCI DE VOTRE PARTICIPATION
N’oubliez pas : http://techtalks.intellicore.net

WWW .INTELLICORE.NET
Tous droits réservés Intellicore Services © 2008

Sign up to vote on this title
UsefulNot useful