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