Documentation Apache
Transcription
Documentation Apache
www.funsofts.fr.st Serveur web : Apache 2002 Documentation Apache Page 1 de 16 www.funsofts.fr.st Serveur web : Apache 2002 Table des matières Table des matières ..........................................................................................2 Installer et configurer un serveur web ..............................................................3 Fonctionnement d'un serveur HTTP.............................................................3 Principe ........................................................................................................3 Fonctionnement général ...........................................................................3 Présentation d'Apache .................................................................................3 Arborescence ...............................................................................................3 bin.............................................................................................................3 cgi-bin .......................................................................................................3 conf...........................................................................................................4 htdocs .......................................................................................................4 icons .........................................................................................................4 log.............................................................................................................4 Compilation d'Apache avec PHP..................................................................4 Remarques ...............................................................................................4 Configuration d’Apache pour le support du PHP ..........................................5 Configuration d'Apache ................................................................................5 httpd.conf ..................................................................................................5 srm.conf ....................................................................................................6 access.conf...............................................................................................7 Lancer et arrêter Apache..............................................................................7 Vérifier si Apache est actif ............................................................................9 Liens ................................................................................................................9 Hôtes virtuels .................................................................................................10 IP :..............................................................................................................10 Besoin matériel: ......................................................................................10 Configuration d'apache pour des hôtes virtuels ......................................10 Installation de plusieurs daemons...........................................................11 Installation d'un daemon simple avec des hôtes virtuels ........................11 Nommés : ...................................................................................................12 Utilisation des hôtes virtuels nommés.....................................................12 Compatibilité avec d'anciens navigateurs ...............................................13 Gestion de la sécurité ....................................................................................14 Exemple de fichier .htaccess......................................................................14 Exemple de mise en place .........................................................................14 Exemple pour protéger un répertoire "private"........................................15 Protection par groupes d'utilisateurs.......................................................16 Liens ..............................................................................................................16 Page 2 de 16 www.funsofts.fr.st Serveur web : Apache 2002 Installer et configurer un serveur web Fonctionnement d'un serveur HTTP Principe Un serveur web est un logiciel permettant à des clients d'accèder à des pages web, c'est-à-dire en réalité des fichiers au format HTML à partir d'un navigateur installé sur leur ordinateur distant. Un serveur web est donc un "simple" logiciel capable d'interpréter les requêtes HTTP arrivant sur le port associé au protocole HTTP (par défaut le port 80), et de fournir une réponse avec ce même protocole. Fonctionnement général • L'application cliente (le navigateur) tente de contacter un serveur avec son nom de machine • L'architecture dns lui renvoie son adresse ip • Le navigateur contact le serveur web avec l'adresse IP sur le port http par défaut -> 80 • Le service http(apache) reçoit la reqête du navigateur et lui renvoie la réponse appropriée • Apache et le navigateur continue la transmission avec leurs adresses ip respectives Présentation d'Apache Serveur HTTP non seulement libre, mais aussi parmi les meilleurs et les plus répandus. Basé sur le code et les idées du serveur NCSA httpd 1.3, le plus courant en 1995, il a depuis énormément évolué, avec beaucoup de patchs au départ, d'où son nom « A PAtCHy sErver ». Il peut être facilement sécurisé et interfacé efficacement avec Perl ou PHP. De plus, il est possible d'écrire ses propres modules. Site web : www.apache.org Arborescence bin Contient l'exécutable du serveur, utilitaires, bench, démon du serveur (à invoquer dans le /etc/inetd.conf cgi-bin Contient vos sources cgi-bin, exemple : le compteur, l'horloge et le guestbook de mon site sont gérés par des cgi-bin - par la suite je n'emploierai plus le terme de cgi-bin mais cgi. Page 3 de 16 www.funsofts.fr.st Serveur web : Apache 2002 conf Contient le fichier de configuration (httpd.conf) htdocs Contient le site web proprement dit (les fichiers html, les images,...) icons Contient les icônes qui seront affichées lors des requêtes représentant le contenu d'un repertoire. log Contient les fichiers de journalisation du serveur - accès et erreurs. Compilation d'Apache avec PHP Il faut tout d'abord récupérer les tarball sur apache.org et php.net et ensuite faire (en root) : Dans le répertoire contenant les sources d'Apache : #./configure --prefix=/www Dans le répertoire des sources de Php : #./configure --with-apache=~/apache_x.x.x #make #make install Dans le répertoire des sources d'Apache : #./configure --activate-module=src/modules/php4/libphp4.a #make #make install Remarques Libphp4.a est généré pendant le make ! --prefix permet de spécifier l’endroit où il va être installé On peut éditer "httpd.h" (ou include/httpd.h) pour personnaliser son installation. Exemples de modification de httpd.h #define HTTPD_ROOT "/etc/httpd" #define DOCUMENT_LOCATION "/home/httpd/html" Page 4 de 16 www.funsofts.fr.st Serveur web : Apache 2002 Configuration d’Apache pour le support du PHP Dans le fichier /www/conf/httpd.conf, il faut ajouter ces lignes : AddType application/x-httpd-php .php .php3 .php4 .inc AddType application/x-httpd-php-source .phps et DirectoryIndex index.html index.htm index.php index.php3 index.php4 Configuration d'Apache httpd.conf C'est le fichier principal de configuration, il se trouve dans le répertoire conf Il contient les directives qui contrôlent le fonctionnement du démon serveur. Un fichier d'un autre nom peut remplacer celui-ci par l'usage de l'option -f de la ligne de commande. Exemple de fichier ServerType standalone Port 80 User droopy Group #100 gid ou nom ou -1 ,ou par defaut(rien) ServerAdmin droopy@ma_niche.fr ServerRoot /etc/httpd Errorlog logs/error_log TransferLog logs/access_log PidFile logs/httpd.pid Timeout 400 MinSpareServers 5 MaxSpareservers 10 MaxClients 150 MaxRequestsPerChild 30 Explications "ServerType" Il y a deux méthodes par lesquelles Apache peut tourner. L'une est un démon qui tourne tout le temps (Apache appelle ceci standalone). La seconde est celle du super-serveur inetd. Le mode inetd économise de la mémoire car Page 5 de 16 www.funsofts.fr.st Serveur web : Apache 2002 Apache ne sera chargé que lorsqu'il sera demandé. Seul le démon inetd restera en mémoire. Cependant, le mode démon est de loin supérieur au mode inetd. Sert a donner une adresse email avec la forme "nom de l'administrateur@nom de domaine. srm.conf Contient les directives qui spécifient les documents que le serveur est susceptible de desservir au clients. Un fichier d'un autre nom peut être utilisé par l'usage de la directive ResourceConfig. Il se trouve dans httpd.conf depuis la version 1.3 d'Apache. Exemple de fichier DocumentRoot /home/httpd/html UserDir public_html DirectoryIndex index.html FancyIndexing on AddIconByEncoding {CMP,/icons/compress.gif} x-compress x-gzip AddIconByType {TXT,/icons/text.gif} text/* #suivit des autres types vidéo ,audio ,images . AddIcon /icons/text.gif .txt .doc .msg .ps #liste des autres icones attribués aux types de fichiers # que vous pouvez personnaliser DefaultIcon /icons/unknown.gif Read Name README HeaderName HEADER AccessFileName .htaccess DefaultType text/plain AddEncoding x-compress Z AddEncoding x-gzip gz AddLanguage en .en AddLanguage fr .fr LanguagePriority fr en Alias /icons/ /etc/httpd/icons/ #si vous avez laissé le module mod_alias.o ScriptAlias /cgi-bin/ /etc/httpd/cgi-bin/ Explications "UserDir " Page 6 de 16 www.funsofts.fr.st Serveur web : Apache 2002 Apache nous donne la possibilté d'héberger les documents html personnels des autres utilisateurs dans leur répertoire respectif. Dans un navigateur, si on entre la demande "http://droopy.ma_niche.ch/", Apache va traduire par : /home/httpd/html/index.html. Maintenant, si on tape "http://droopy.ma_niche.fr/~/biff/", là, "UserDir" offre plusieurs possibilités. - prenons l'option par défaut "public_html" (~/public_html). Ce répertoire doit être lisible et exécutable par tous pour que Apache puisse y accéder... Cela réduit la sécurité de notre réseau (local). Il est donc préférable de le configurer différemment. - pour que chaque utilisateur dispose de son répertoire perso dans /home/httpd/, utilisez l'option UserDir /home/httpd/*/html . Ainsi lorsqu'une demande arrivera pour ~/biff/, Apache traduira par /home/httpd/biff/html/index.html ce qui offre en plus la possibilité à l'utilisateur d'y mettre ses propres scripts cgi dans /home/httpd/biff/cgi-bin/... On peut aussi se contenter de l'option UserDir /home/httpd/ (/home/httpd/biff/ pour Apache). access.conf Contient les directives qui définissent les droits d'accès aux documents. Un fichier d'un autre nom peut être utilisé par l'usage de la directive AccessConfig. Il se trouve dans httpd.conf depuis la version 1.3 d'Apache. Exemple de fichier <Directory /etc/httpd/cgi-bin> Options Indexes FollowSymLinks AllowOverride None </Directory> <Directory /home/httpd/html> Options Indexes FollowSymLinks AllowOverride None order allow,deny allow from all </Directory> Lancer et arrêter Apache Lancer : httpd Relancer : httpd restart Arreter : httpd stop ou kill -TERM `cat /usr/local/etc/apache/logs/httpd.pid` Page 7 de 16 www.funsofts.fr.st Serveur web : Apache 2002 Après chaque modification des fichiers de configuration, on doit entrer la commande : kill -HUP, suivi du numéro pid que l'on obtient en tapant la commande : # ps -aux | grep httpd Si on obtient: root /usr/sbin/httpd 945 0.0 4.3 10824 5540 ? on utilise la commande: kill -HUP 945 Page 8 de 16 S 15:52 0:04 www.funsofts.fr.st Serveur web : Apache 2002 Vérifier si Apache est actif Il y a deux solutions : 1. la commande ps : ps aux | grep httpd 2. la commande httpd status : /etc/rc.d/init.d/httpd status Liens www.apache.org www.freenix.org/unix/linux/HOWTO/WWW-HOWTO-7.html www.linux-kheops.com/doc/apache/manual-eisti www.linux-france.org/article/serveur/doc_concentree/doc_concentree-13.html www.linux-france.org/article/web/egraffin/apachelinux.html www.linux-france.org/prj/edu/p-mcurie/apache.html myweb.worldnet.net/~lmsoft/linux/indexnet.php3?page=httpd www.toolinux.com/linutile/howto-html/html/WWW-HOWTO-7.html Page 9 de 16 www.funsofts.fr.st Serveur web : Apache 2002 Hôtes virtuels IP : Besoin matériel: Le serveur doit disposer d'une adresse IP par hôtes Soit par plusieurs connexions physiques au réseau Soit par une interface virtuelle Configuration d'apache pour des hôtes virtuels On peut lancer des deamon http de deux manières pour pouvoir utiliser des hôtes virtuels par IP : lancer un deamon http par hôte 1 seul deamon pour tous les hôtes • • Pourquoi plusieurs deamons • Vous disposez de solutions de sécurité pour les partitions disques, par exemple une société 1 peut ne pas vouloir que les employés d'une société 2 lisent des informations sur la société 1 autrement que par le web. Dans ce cas, vous aurez besoin de deux daemons, chacun fonctionnant avec différentes configurations de User, Group, Listen, et ServerRoot. • Vous avez de la mémoire en réserve et avez suffisament de descripteurs de fichiers disponibles pour tous les IP définis sur la machine. Le fonctionnement d'Apache ne lui permet que d'écouter l'adresse "globale", ou alternativement des adresses spécifiques. Si vous avez besoin de d'écouter de façon séparée une adresse spécifique quelqu'en soit la raison, il vous faudra nécessairement écouter chacune des autres adresses spécifiques (Il est toutefois possible de consacrer un processus httpd à l'écoute de N-1 adresses, et un autre pour l'adresse particulière que l'on souhaite écouter à part). Pourquoi un deamon • Le partage de la configuration http entre les différents hôtes virtuels est possible. • La machine sert un grand nombre de requêtes, et donc, la perte de performance due à l'exécution de daemons séparés peut être significative. Page 10 de 16 www.funsofts.fr.st Serveur web : Apache 2002 Installation de plusieurs daemons Créez une installation d'http séparée pour chaque hôte virtuel. Pour chaque installation, utiliser la directive Listen dans le fichier de configuration pour sélectionner l'adresse IP (ou hôte virtuel ) que le daemon va servir. Ex. : Listen www.smallco.com:80 Il est recommandé d'utiliser une adresse IP à la place du nom d'hôte Installation d'un daemon simple avec des hôtes virtuels Dans ce cas, une simple instance d'httpd servira des requêtes pour le serveur principal et tous les hôtes virtuels. La directive VirtualHost dans le fichier de configuration est utilisée pour installer les valeurs des directives de configuration ServerAdmin, ServerName, DocumentRoot, ErrorLog et TransferLog ou CustomLog à différentes valeurs pour chaque hôte virtuel. Ex. : <VirtualHost www.smallco.com> ServerAdmin [email protected] DocumentRoot /groups/smallco/www ServerName www.smallco.com ErrorLog /groups/smallco/logs/error_log TransferLog /groups/smallco/logs/access_log </VirtualHost> <VirtualHost www.baygroup.org> ServerAdmin [email protected] DocumentRoot /groups/baygroup/www ServerName www.baygroup.org ErrorLog /groups/baygroup/logs/error_log TransferLog /groups/baygroup/logs/access_log </VirtualHost> Page 11 de 16 www.funsofts.fr.st Serveur web : Apache 2002 Nommés : Utilisation des hôtes virtuels nommés L'utilisation des nouveaux hôtes virtuels est relativement simple, et ressemble à peu près à l'ancienne méthode. Vous devez simplement ajouter à un des fichiers de configuration d'Apache ( plus particulièrement httpd.conf ou srm.conf) un code ressemblant à celui qui suit : NameVirtualHost 111.22.33.44 <VirtualHost 111.22.33.44> ServerName www.domain.tld DocumentRoot /web/domain </VirtualHost> La différence notable entre la configuration des hôtes virtuels basés sur une adresse IP et celle des hôtes nommés est la directive NameVirtualHost , qui spécifie une adresse IP qui doit être utilisé comme une cible pour les hôtes virtuels nommés. De plus, toute directive supplémentaire peut ( et doit ) être placé à l'intérieur de la section <VirtualHost> . Pour que ceci fonctionne, vous devez vous assurez que le nom www.domain.tld est un alias (CNAME) pointant vers l'adresse IP 111.22.33.44 De nombreux serveurs peuvent être accessibles par plus d'un nom. Par exemple, le serveur de l'exemple peut être accessible en tant que domain.tld, ou www2.domain.tld, en supposant que les adresses IP définies pointent sur le même serveur. En fait, il se peut que l'on veuille que toutes les adresses du domaine domain.tld soient prises en compte par ce serveur. Ceci est possible grâce à la directive ServerAlias, placé à l'intérieur de la section <VirtualHost>. Par exemple:: ServerAlias domain.tld *.domain.tld Notez que vous pouvez utiliser les metacaractères * et ?. Vous pouvez également avoir besoin de ServerAlias si vous servez des utilisateurs locaux qui ne mentionnent pas toujours le nom du domaine. Par exemple, si les utilisateurs locaux préfèrent l'écriture "www" à l'écriture "www.foobar" , alors vous aurez besoin d'ajouter ServerAlias www www.foobar . Il n'est pas possible pour le serveur de connaître quel domaine le client utilise pour la résolution du nom car le client ne peut pas fournir cette information dans sa requête. Page 12 de 16 www.funsofts.fr.st Serveur web : Apache 2002 Compatibilité avec d'anciens navigateurs Comme mentionné précédemment, certains clients n'envoient pas les données nécessaires au bon fonctionnement des hôtes virtuels nommés. Les pages envoyées à ces clients seront toujours celles du premier hôte virtuel nommé ( le premier apparaissant dans le fichier de configuration pour une adresse IP particulière). Une solution possible consiste à utiliser la directive ServerPath, bien qu'elle soit un peu fastidieuse : Exemple de configuration: NameVirtualHost 111.22.33.44 <VirtualHost 111.22.33.44> ServerName www.domain.tld ServerPath /domain DocumentRoot /web/domain </VirtualHost> Qu'est-ce que cela signifie? Qu'une requête pour toute URI commençant par "/domain" sera servie à partir de l'hôte virtuel www.domain.tld Ce qui veut dire que les pages peuvent être obtenues par l'URL http://www.domain.tld/domain/ par tous les clients, bien que les clients renseignant le champ d'en-tête Host: puissent aussi y accéder en tant que http://www.domain.tld/. Pour que cela fonctionne, créez un lien sur la home-page de l'hôte virtuel vers http://www.domain.tld/domain/. Puis, dans les pages de l'hôte virtuel, forcez vous à utiliser, soit exclusivement des liens relatifs (ex. "file.html" ou "../icons/image.gif" ), soit des liens contenant le préfixe /domain/ (ex. "http://www.domain.tld/domain/misc/file.html" ou "/domain/misc/file.html"). Ceci demande de la discipline , mais si vous suivez la plupart des indications, assurez vous que vos pages fonctionneront avec tous les navigateurs, nouveaux et anciens. Page 13 de 16 www.funsofts.fr.st Serveur web : Apache 2002 Gestion de la sécurité Pour que le démon httpd puisse accéder aux fichiers, ceux-ci doivent avoir le droit de lecture pour tous. Pour l'appliquer à tous les fichiers d'un répertoire, il faut lancerla commande chmod a+r *. Pour restreindre l'accès à certains documents et répertoires, vous avez deux possibilités. Soit vous indiquez, dans le fichier access.conf, répertoire par répertoire, les protections que vous désirez appliquer ; soit vous placez un fichier .htaccess dans chaque répertoire à protéger. Mais ces deux techniques peuvent également être combinées en utilisant : - le fichier access.conf - les fichiers .htaccess et .htpasswd dans les répertoire à protéger Dans le second cas, on utilisera le fichier srm.conf pour y indiquer la priorité du fichier .htaccess Exemple de fichier .htaccess <Directory /home/httpd/html> Options Indexes Includes FollowSymLinks AllowOverride All # donne la priorité à tous les fichiers .htaccess order allow,deny allow from .notre_domaine.ch </Directory> Cela permet d'autoriser uniquement les utilisateurs de .notre_domaine.ch à accéder aux fichiers du répertoire où est placé ce fichier. Pour autoriser tout le monde, il faut mettre « allow from all ». Exemple de mise en place Chaque répertoire devra contenir les fichiers : .htaccess et .htpasswd Le fichier .htpasswd contiendra les noms des utilisateurs et leur mot de passe et le fichier .htaccess contiendra les infos concernant les utilisateurs et le répertoire . Page 14 de 16 www.funsofts.fr.st Serveur web : Apache 2002 Exemple pour protéger un répertoire "private" 1 ) Création du répertoire à protéger : cd /home/httpd/html mkdir private chmod o+rx private 2 ) construction du fichier .htpasswd et ajout du premier utilisateur: htpasswd -c private/.htpasswd snoopy 3 ) Ajout de nouveaux utilisateurs : htpasswd private/.htpasswd droopy Avec la commande htpasswd, utilisez l'option -c pour construire votre fichier .htpasswd (la première fois) . Voici un exemple de fichiers pour autoriser l'accès du répertoire /home/httpd/html/private aux seuls utilisateurs "snoopy", "droopy" et "dingo" : # /home/httpd/html/private/.htaccess # ErrorDocument 404 /erreur404.html AuthUserFile /home/httpd/html/private/.htpasswd AuthGroupFile /dev/null AuthName PasswdProtection #AuthName ByPassword AuthType Basic <Limit GET> require user snoopy droopy dingo </Limit> # end # /home/httpd/html/private/.htpasswd # snoopy:XzZZwDgl6rQ.w droopyy:qYnotiUtdSNRc dingo:r0SgAwS9zorpo Page 15 de 16 www.funsofts.fr.st Serveur web : Apache 2002 # end Au moment de leur transfert sur le réseau, les mots de passe vont être "UUencoded" pour réduire leur lisibilité. Protection par groupes d'utilisateurs Il est possible d'utiliser un fichier .htgroup pour protéger par groupes d'utilisateurs. Exemple de fichier # /home/httpd/html/private/.htgroup # admin-grp: mic riton eugene system-grp: eric pierrot visit-grp: snoopy droopy dingo # end # /home/httpd/html/private/.htaccess # AuthUserFile /home/httpd/html/private/.htpasswd AuthGroupFile /home/httpd/html/private/.htgroup AuthName ByPassword AuthType Basic <Limit GET> require group visit-grp require group visit-admin require group visit-system </Limit> # end Liens www.commentcamarche.net/apache/apacht.php3 myweb.worldnet.net/~lmsoft/linux/indexnet.php3?page=access hoohoo.ncsa.uiuc.edu/docs-1.5/tutorials/user.html www.apacheweek.com/features/userauth Page 16 de 16