Auteur David
Parize
Date de création 01/02/03
Version 7
Date de dernière mise à jour 20/03/03
Serveur Apache / WEB
Je remercie par ailleurs mes formateur Sébastien Dupont de Epita et Franck Desmeuze qui m’ont donnés cet enseignement . Je remercie les sites qui m’ont permis de réaliser ce document,.
Toutes suggestion peut m’être adressée à l’adresse suivante david.parize@wanadoo.fr avec comme objet de message Apache
Merci
A. Création d’un
profil utilisateur
B. Vérification des
package sous Linux
C. Décompactage et
compilation
D. Création de table
et droits
A. Décompactage et
compilation
B. Création de
l'environnement
IV. Le fichier de configuration d’Apache
VI. Détail du fichier de configuration d’Apache / PHP
VII. Les pages WEB utilisateurs
[ Gestion de bases
de données avec MySQL
[ Administration
des bases MySQL avec phpMyAdmin
I. Introduction aux bases de données
B. Requetes sur
plusieurs tables
III. Exemple de base de données
Serveur
Apache / WEB
Apache / PHP /MySQL
Après avoir acquis ses premières lettres de noblesse avec des sites au
contenu statique, le Web a depuis quelques temps amorcé un virage afin de
rendre la consultation de l'information plus "adaptable" aux
desiderata de tout un chacun.
Les évolutions ont dans un premier temps été apportées du côté client,
tout d'abord en donnant à l'internaute le moyen d'agir via des formulaires,
puis par des scripts écrits dans un langage adapté. Netscape venait de créer Javascript.
Microsoft proposera plus tard VBScript avec une syntaxe quasi-identique à Visual
Basic.
Les limitations sont vite apparues (accès aux fichiers, interactions
avec des bases de données) et d'autres pistes ont été étudiées. L'idée qui
émergea fut ainsi de déplacer le travail d'interactivité vers le serveur Web : la notion de scripts exécutés côté serveur
(server-side scripting) était née et ouvrait grand les portes du
Web dynamique.
Le concept général est d'intégrer au sein d'une page statique des
éléments de code écrits dans un langage spécifique, et qui vont être
interprétés par un module installé sur le serveur Web.
Le résultat de cette interprétation est généralement du HTML,
qui est inséré par le serveur Web en lieu et place des
zones de code au moment où la page est envoyée vers le navigateur de
l'internaute.
Actuellement, plusieurs grands plates-formes destinées à fournir du
contenu dynamique existent sur le marché. Elles sont globalement constituées de
trois composants :
·
le serveur HTTP,
·
le module d'interprétation de scripts
·
la base de données.
Voici une liste non-exhaustive des différents composants existants :
• Pour les serveurs HTTP, les plus utilisés sont Apache (auquel ce cours est dédié) et Internet
Information Server de Microsoft,
• Pour les modules d'interprétation de scripts, PHP, Active
Server Pages de Microsoft
et ColdFusion de Allaire,
• Pour les bases de données, MySQL et PostgreSQL, SQL
Server de Microsoft et
Oracle.
La plate-forme pour les sites dynamiques la plus en vogue du moment (car
elle utilise uniquement des logiciels libres) est constituée de Apache /
PHP / MySQL, tournant sur Linux.
Le présent guide a donc pour objectif de présenter une manière
d'installer et configurer cette plate-forme comme support pour des sites Web
dynamiques, que ce soit pour un Intranet ou un site Internet.
·
Apache Fonctionne sous Linux, Unix,
MicroSoft, il gère l’HTML, PHP (ASP)
Super rapide, &
gratuit
ASP module
additionnel ASPMOD, Perl
BD : Oracle,
MySql, Postgres SQL.
Avant toute
chose, il faut installer 4 bibliothèques nécessaires a l’utilisation de Apache.
MM est une
librairie qui permet une utilisation simplifiée de la mémoire partagée (ou
shared memory) utilisée lors de la communication inter-processus (ou
IPC, Inter Processus Communication) sur les plates-formes de type Unix. La
raison pour laquelle il est intéressant d'installer cette librairie sur votre
système est lors de l'utilisation des sessions avec PHP 4.
En effet, Tobias Ratschiller, dans son article sur la gestion des
sessions (l'article ici) recommande la librairie MM :
"si vous souhaitez des
performances élevées, le module mm est une alternative très intéressante, car il permet le stockage
des données de session en mémoire partagée (NDR : Plutôt que dans un
fichier) et n'est donc pas limité par les performances du sous-système
disque".
Lieu : www.engelschall.com/sw/mm mm-1.2.1.tar.gz
·
Pour
installer MM, décompactez les sources :
# tar xvfz mm-1.2-1.tar.gz
#cd mm-1.2.1
# ./configure
--prefix=/usr/local
# make
# make install
La
librairie Freetype apporte à Linux le support des polices True Type de
Windows. Le premier champ d'application possible est leur utilisation sous X-Window.
L'autre
possibilité, relayée par la librairie GD, est la génération d'images
comportant un texte utilisant des polices True Type.
Lieu http://prdownloads.sourceforge.net/freetype/ freetype-2.1.3.tar.gz
# tar xvfz freetype-2.1.3.tar.gz
# cd freetype-2.1.3/build/unix
./install-sh unix-cc.in /home/freetype-2.1.3/
./configure
# make setup
# make setup CFG="-prefix=/usr"
# make
# make install
#
Idconfig
# Idconfig -v | grep freetype
libfreetype.so.6 -> libfreetype.so.6.1.0.
Pour
ajouter le support de la génération dynamique d'images à PHP, nous allons utiliser la librairie GD. La dernière version stable est la
1.8.4 mais celle-ci ne fonctionne pas correctement avec FreeType du fait
qu'elle ne supporte par les polices True Type de type 2.
Il est donc
nécessaire d'utiliser la version 2.0.11 qui ne devrait pas poser de
problèmes particuliers. Ajoutons qu'afin de compiler cette librairie sans
souci, il est nécessaire que les librairies suivantes,soient préalablement
installées
libpng, libjpeg-6b et zlib.
Verifier : rpm
–qa | grep libpng
Lieu: http://www.libpng.org/pub/png/libpng.html libpng-1.2.5.tar.gz
manuel : http://www.libpng.org/pub/png/libpng-manual.doc
tar –xvzf libpng-1.2.5.tar.gz
cd libpng-1.2.5
cp scripts/makefile.openbsd makefile
make
make install
verifier: rpm –qa | grep libjpeg-6b
Lieu : ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
manuel http://beyond.linuxfromscratch.org/view/cvs/general/libjpeg.html
tar xvzf jpeg-6b.tgz
./configure --enable-static
--enable-shared --prefix=/usr &&
make &&
make install
verifier rpm –qa | grep
zlib
lieu: http://www.gzip.org/zlib/ zlib-1.1.4.tar.gz
tar xvzf zlib-1.1.4.tar.gz
cd zlib-1.1.4.
./configure
make
make
install
Pour ajouter le support du format TIFF dans
PHP, je vous recommande si ce n'est déjà fait d'installer libtiff.
Lieu : www.boutell.com/gd gd-2.011.tar.gz
gd-2.0.1.tar.gz
Manuel : http://www.boutell.com/gd/manual2.0.11.html
# tar xvfz gd-2.0.1.tar.gz
#cd gd-2.0.1
# make
install
#
Idconfig
# sync
# Idconfig -v | grep gd
libgd.so.2.0.0 -> libgd.so.2.0.0
./configure
make
make install
ldconfig
sync
L’installation fonctionne très bien sur la RedHat
La librairie PDFLib
permet à PHP de générer des fichiers PDF à la
volée. Il est dès lors possible de proposer aux visiteurs du site de
sauvegarder un article ou le résultat d'une requête sous la forme d'un document
PDF et donc de profiter des avantages qu'offre ce format.
Lieu : http://www.pdflib.com/pdflib/download/index.html pdflib-4.0.3 tar.gz
·
Décompactez
les sources et placez-vous dans le répertoire de travail :
# tar
xvfz pdflib-4.0-3.tar.gz
#cd pdflib-4.0.3
#
./configure
# make
# make
install
# Idconfig
# sync
Le Système de Gestion de Bases de Données Relationnelles (SGBDR) MySQL doit sa popularité à
plusieurs facteurs.
Tout d'abord son ouverture sur le monde du logiciel libre, mais
également sa simplicité et sa rapidité qui lui ont valu d'être le moteur de
bases de données de choix dans les sites Web dynamiques.
En effet, MySQL offre des performances incroyables lors de la
consultation de données, ce qui est un critère primordial. A contrario, il
n'est que peu adapté pour des applications transactionnelles classiques (Online
Transaction Processing, OLTP), le verrouillage lors d'un ajout ou d'une
modification se faisant au niveau de la table toute entière
Ajoutons également qu'il ne gère pas les clés étrangères. Ces lacunes
n'ont toutefois que peu d'impact dans le cadre d'un site d'information où
quelques webmestres ajoutent ponctuellement des news ou des
articles.
Désormais libre d'utilisation, MySQL évolue régulièrement et une
nouvelle version dénommée MySQL-Max a vu le jour. Celle-ci apporte un
meilleur support des transactions et élargit de ce fait le champ d'action de ce
moteur aux qualités certaines.
Le principal concurrent de MySQL dans le monde du logiciel libre est PostgreSQL.
Ce SGBDR a une vocation de base plus généraliste que MySQL
et se veut donc plus complet. Ainsi, et entre autres, les clés étrangères sont
supportées et la gestion des verrous est plus souple. Par contre, il n'est pas
censé offrir la même rapidité en consultation que son concurrent
Lieu : http://www.mysql.com/downloads/index.html mysql3.23.55.tar.gz
http://beyond.linuxfromscratch.org/view/cvs/content/mysql.html
Manuel : http://www.mysql.com/Downloads/Manual/manual.pdf-2002-07-26.zip
Tout
d'abord, dans un souci de sécurité (surtout si votre serveur est sur Internet),
il est préférable de faire tourner le moteur MySQL sous le profil d'un
utilisateur avec des droits limités plutôt que root. Ainsi, dans
l'hypothèse où un pirate pourrait exploiter une brèche de sécurité de MySQL, son champ d'action serait limité
aux droits conférés à l'utilisateur fictif.
#
groupadd mysql
# useradd -G mysql mysql
# groupadd mygrp
# useradd -g mygrp myusr
Remarque : sur une Slackware 8.0, même si le
package MySQL n'a pas été installé, l'utilisateur mysql et
le groupe mysql existent déjà. Cela ne pose pas de problème, mais
dans le fichier /etc/passwd, dans la ligne correspondant à
mysql, il faut remplacer /var/lib/mysql par /usr/local/mysql.
rpm –qa | grep –i
mysql
Si vous
obtenez : mySQL-client-3.23.47-5mdk
mySQL-shared-3.23.47-5mdk
mySQL-3.23.47-5mdk
php-mysql-4.1.2-1mdk
Supprimer les
paquetages : rpm –e nom_package
rpm –ivh mysql-3.23.55mdk
mysql-client
mysql-devel
mysqkl-shared
# tar
xvfz mysql-3.23.55.tar.gz
# cd mysql-3.23.55
Les possibilités de pré configuration de MySQL sont
vastes. Nous allons donc vous en présenter certaines qui devraient vous permettre
de déterminer lesquelles utiliser en fonction de vos besoins.
--prefix=rép : rép sera le répertoire principal de
MySQL, les composants seront placés dans des sous-répertoires (bin,
share, etc.).
--localstatedir=rép: les bases de données et les journaux
(logs) seront placés dans ce répertoire (sur un disque de données
séparé par exemple).
--without-debug : MySQL ne sera pas compilé pour produire
des informations de débogage. Cette option est à sélectionner pour un serveur
de production.
--enable-assembler : lors de la compilation, des
fonctions de manipulation de chaînes de caractères en assembleur seront
utilisées.
--with-client-ldflags=-all-static : les outils client de MySQL (mysql,
mysqladmin) seront compilés de façon à ne pas utiliser les librairies
dynamiques. Les binaires générés seront plus gros, mais les applications seront
plus rapides.
--disable-shared : seules les versions statiques des
librairies de MySQL seront générées.
·
Nous
proposons de faire la pré-configuration avec la commande suivante :
- ./configure \
--prefix=/usr/local/mysql-3.23.55\
--Iocalstatedir=/data/mysql \
--without-debug \
--enable-assembler \
--with-mysqld-ldflags=-all-static
L’installation de
libtermcap2-devel.rpm serait nécessaire
N.B. : les
backslashes en fin de ligne permettent, en tapant sur la touche "Entrée",
de continuer la saisie de la commande à la ligne suivante et non pas
de la valider.
make
make install
In -s /usr/local/mysql-3.23.43 /usr/local/mysql
Ainsi,
toute référence à la version de MySQL est occultée, ce qui est plus souple et plus
évolutif.
Les outils MySQL utilisant les
librairies dynamiques, il est nécessaire de configurer le gestionnaire de
librairies dynamiques pour qu'il connaisse l'emplacement de ces librairies.
echo
/usr/local/mysql/lib/mysql » /etc/ld.so.conf
Idconfig
sync
·
La
vérification du bon paramétrage se fera par la commande suivante :
ldconfig -v | grep mysql
·
Le
résultat devant être :
/usr/local/mysql/lib/mysql:
libmysqlclient.so.10 -> libmysqlclient.so.10.0.0
L'étape suivante consiste à créer les tables
système (utile uniquement si MySQL n'a jamais été installé), depuis le
répertoire ou vous avez copié le tar.gz /home/mysql-3.23.55
#
scripts/mysq_Install_db
Lors de son
exécution, le script mysql_install_db vous suggère vivement de
saisir un mot de passe pour l'utilisateur root de MySQL.
Cet utilisateur dispose de tous les privilèges sur les tables systèmes donc ce
conseil est bon à suivre.
Lancez les commandes suivantes pour donner
les droits sur répertoires de MySQL aux utilisateurs fictifs créés précédemment
:
# chown -R root /usr/local/mysql/
# chown
-R mysql /data/mysql répertoire par défaut /usr/local/mysql/var
# chgrp -R mysql /usr/local/mysql/
# chgrp -R mysql /data/mysql
Le "/" à la fin des commandes portant sur le
répertoire /usr/local/mysql est important car il permet que le traitement s'opère sur le
répertoire pointé par le lien mysql et non le lien lui-même.
·
Les
exécutables sont installé par défaut dans /usr/local/bin
·
Le
daemon mysql /usr/local/libexec
·
Les
bibliothèque dans /usr/local/lib/mysql
·
Les
base sont installées dans /usr/local/var
Si vous
disposez de 512 Mo à 1 Go de mémoire, utilisez le fichier my-large.cnf.
Si vous disposez de plus d'1 Go de mémoire, utilisez le fichier my-huge.cnf.
# cp support-files/my-medium.cnf
/etc/my.cnf
[mysqld]
: user= mysql
Ceci permet
de spécifier au démon MySQL de tourner avec les droits de l'utilisateur mysql
sans avoir à le spécifier sur la ligne de commande.
Une astuce pour gagner en performance :
utilisez la commande Unix strip qui retire d'un binaire les symboles utilisés lors de l'édition de
lien. Le plus utile est de l'exécuter sur mysqld, le démon MySQL
: strip
/usr/local/mysql/libexec/mysqld
# /usr/local/mysql/bin/safe_mysqld &
# ps |
grep mysql
Pour que le
démon MySQL démarre et s'arrête automatiquement, vous pouvez utiliser le
fichier mysql.server.
# cp
support-files/mysql.server /etc/rc.d
# chmod
755 /etc/rc.d/mysql.server
# Démarrage MySQL.
if [ -x /etc/rc.d/mysql.server ]; then
. /etc/rc.d/mysql.server start
fi
·
Copier
le fichier mysql.sever.sh dans /etc/rc.d/init.d et
on le nommera mysql.
cp
mysql-3.23.55/support-files/mysql.server /etc/rc.d/init.d/mysql
·
Donner
les droits d’execution à ce fichier
chmods
755 /etc/rc.d/init.d/mysql
·
Lancement
automatique à l’état de marche 3—5
chkconfig –level 345 mysql on
·
Et un
arrêt à l’état de marche 0- 1-2-6
chkconfig
0126 mysql off
/usr/local/mysql/bin/mysqladmin -u root
password lnew_password'
/usr/local/ùmysqladmin –u root –h nom_machine –p password ‘new_password’
·
Vous
pouvez également lancer quelques commandes de test :
cd
/sql-bench ; run-all-tests
/usr/local/mysql/bin/mysqladmin version
/usr/local/mysql/bin/mysqladmin variables
/usr/local/mysql/bin/mysqlshow
/usr/local/mysql/bin/mysqlshow mysql
/usr/local/mysql/bin/mysql -e
"sélect host,db,userfrom db" mysql
Le serveur
HTTP Apache jouit d'une notoriété indiscutable dans le monde d'Internet.
D'après la société Netcraft, qui étudie chaque mois les "parts de
marché" des différents type de serveurs Web, Apache domine largement ses concurrents avec une utilisation sur plus de
60% des serveurs HTTP publics dans le monde.
Ce succès
est non seulement dû à sa gratuité, mais également à sa robustesse
et à son extensibilité. Apache est également une plate-forme de
choix pour un intranet, et est très répandu dans les
universités et les écoles. Actuellement en version 1.3.27, Apache connaît des
développements réguliers; Les plus grandes évolutions devraient venir de la
version 2.0 (actuellement en bêta) qui apporte entre autres un support très
poussé des processus légers (threads) pour une meilleure efficacité d'ensemble.
Lieu : http://www.apache.org/dist/httpd/ apache_1.3.27.tar.gz
Manuel : http://www.openbsd.org/docum.html
Pour
installer Apache, décompactez tout d'abord les sources et placez-vous dans le
répertoire nouvellement créé :
# tar xvfz apache_1 -3.27.tar.gz
# cd apache_1.3.22
Tout comme MySQL,
Apache accepte un nombre considérable de paramètres lors de sa pré
configuration. Voici un exemple de commande, vous trouverez le détail de ses
paramètres ci-après :
# ./configure
\
--prefix=/usr/local/apache
\ Répertoire finale d’Apache
--htdocsdir=/data/web/www \ Répertoire
racine des fichiers consultables
--cgidir=/data/web/cgi-bin \ Répertoire
racine des fichiers CGI
--enable-module=rewrite
\ Réécriture de l’URL
--enable-shared=max Mettre
un maximum de modules dynamique
N.B. : les backslashes en fin de
ligne permettent, en tapant sur la touche "Entrée", de continuer la
saisie de la commande à la ligne suivante et non pas de la valider.
Quelques
explications sur les options :
·
--prefix=/usr/local/apache-1.3.27 indique que l'ensemble des composants
d'Apache (binaires, modules, fichiers de configuration, etc.) seront placés
dans le répertoire /usr/local/apache-1.3.22 ou ses
sous-répertoires (bin, conf, libexec,
etc.). Si vous souhaitez installer Apache dans un autre endroit de votre
arborescence, il suffit de jouer sur ce paramètre.
·
--htdocsdir et -cgidir permettent
de spécifier des répertoires où les pages HTML et les programmes CGI seront stockés.
·
Pour
info, si vous souhaitez placer les fichiers de configuration dans un endroit
précis, vous pouvez spécifier le paramètre --sysconfdir=répertoire,
comme par exemple
--sysconfdir=/etc/apache-conf pour placer les fichiers de
configuration dans le répertoire /etc/apache-conf.
·
--enable-module=rewrite spécifie d'ajouter le module
permettant la réécriture automatique d'URL (il n'est pas disponible par
défaut). Les modules de bases sont normalement suffisants et ne nécessitent pas
de librairies complémentaires.
·
Vous
pouvez choisir l'option -enable-module=all, ainsi l'ensemble des
modules complémentaires (authentification, redirection, etc.)
vont être compilés et seront actifs, c'est-à-dire prêt à être chargés au besoin
par Apache pour utiliser leurs fonctions.
Pour avoir
l'ensemble des fonctionnalités, on préférera en général l'option
--enable-module=most qui ajoute et active tous les modules sauf les
suivants :
o
auth_db (car tous les systèmes n'ont pas la
librairie db),
o
mmap_static (toutes les systèmes n'ont pas
accès à la fonction mmap() - de plus ce module est considéré comme
expérimental),
o
so (pas de gestion dynamique des
modules - voir un peu plus bas),
o
example (utile uniquement aux développeurs
de modules), auth_digest (car ce module peut entraîner des
conflits avec le module digest - de plus il est considéré
expérimental),
o
log_agent et log_referer (qui
sont obsolètes, leurs fonctionnalités ont été intégrées dans le module log_config).
--disable-module permet de spécifier certains
modules optionnels fournis avec les sources d'Apache à ne pas compiler
(et donc indisponibles).
·
Par
exemple, si vous spécifiez --enable-module=all, il vaut mieux malgré tout
désactiver certains modules. Ainsi, ajouter les options
--disable-module=mmap_static \ ~disable-module=auth_digest V
--disable-module=example \
spécifie de
ne pas utiliser les modules mod_mmap__static, mod_auth_digest et
mod_example.
La dernière
option est certainement la plus intéressante car elle indique au configurateur
que l'on souhaite utiliser les modules dynamiques.
En effet, tout comme le noyau de Linux est capable d'utiliser des
modules qui ne sont chargés que si besoin est, Apache est capable
d'utiliser un mécanisme similaire. Les avantages sont doubles. Tout d'abord, Apache
ne charge en mémoire que les modules dont il a besoin à un instant précis, et
cela libère donc la mémoire centrale du serveur pour d'autres tâches.
Ensuite, on dispose d'une plus grande souplesse. Installer un nouveau module ne
nécessite que la compilation du dit module et ne nécessite donc plus les
sources d'Apache.
De plus, une mise à jour de version de PHP est bien plus aisée puisqu'il suffit de recompiler la nouvelle
version sous forme de module et ne nécessite donc pas d'interruption du serveur
HTTP. La légère contrepartie par rapport à une intégration des
composants au sein d'Apache est une légère augmentation de la charge du
serveur dû à la nécessite de gérer les chargements et déchargements des modules
en mémoire.
Si vous souhaitez disposer d'un bon compromis entre performance et maintenance
aisée, vous pouvez intégrer les modules fournis avec Apache (donc
dépendants de la version d'Apache) dans l'exécutable.
Pour cela,
il suffit de ne pas spécifier l'option --enable-shared=max.
Par contre,
les modules tiers (et donc indépendants de la version d'Apache) tels que PHP,
mod_gzip, etc. peuvent être gérés comme modules dynamiques via apxs.
Vous pouvez
maintenant lancer la compilation et l'installation :
# make
# make install
Tout comme
nous l'avons fait pour MySQL, nous vons conseillons de créer un lien symbolique
apache vers le répertoire d'installation (apache-1.3.27) le cas échéant :
# In -s /usr/local/apache-1.3.27 /usr/local/apache
Vous pouvez
maintenant démarrer Apache :
# /usr/local/apache/bin/apachectl start
·
Pour
vérifier que l'installation est correcte, ouvrez votre navigateur et
tapez simplement l'adresse IP ou le nom (si vous avez un DNS)
de la machine sur laquelle vous venez d'installer Apache. La page de
démarrage devrait apparaître
Utiliser lynx sous openBSD : lynx
127.0.0.1
·
Pour qu'Apache
démarre automatiquement, ajoutez les lignes suivantes au fichier /etc/rc.local (valable sur Linux Slackware) :
# Démarrage Apache
if [ -x /usr/local/apache/bin/apachectl ]; then
. /usr/local/apache/bin/apachectl start
fi
L'étape
suivante va consister à modifier le fichier de configuration d'Apache
afin de l'adapter à nos besoins. Celui-ci se trouve dans le sous-répertoire /usr/local/apache/conf
et se nomme httpd.conf. Plutôt que d'en détailler chaque
ligne, nous allons vous en présenter les options (ou directives) importantes, ainsi que quelques
propositions de modification. Le fichier httpd.conf comporte
trois grandes sections que nous allons maintenant décrire.
Cette
section comprend des paramètres qui décrivent le fonctionnement global d'Apache
comme par exemple le nombre de requêtes concurrentes qu'il peut accepter. Voici
les plus importants :
ServerType
standalone ligne 52
Cette
option décrit le mode d'exécution d'Apache. Les valeurs possibles sont inetd ou standalone (autonome), ce dernier étant choisi par défaut.
Rappelons
que le démon inetd (appelé également le "super-serveur
Internet") est en quelque sorte un superviseur. Il attend des
connexions sur un certain nombre de ports (21 pour FTP, 23
pour Telnet, etc.) et lors d'une demande de connexion sur un port
particulier, il démarre une application (ou démon) spécifique apte à fournir
les services qu'attend la machine appelante.
Cette
application terminée, inetd continue l'écoute sur le port.
L'intérêt d'inetd est donc de limiter la charge du système en ne
démarrant un démon qu'à la demande.
En mode
autonome, le démon Apache est en permanence présent en mémoire, qu'il y
ait ou non des requêtes. Ce mode est préféré car plus performant :
lors d'une requête, Apache répond instantanément. A l'opposé, en mode inetd,
un temps de latence inhérent à l'activation du démon est constaté et pénalise
lourdement la performance d'un serveur très sollicité. Nous vous conseillons de
conserver le paramètre standalone.
ServerRoot
"/usr/local/apache-1.3.27" ou “/usr/local/apache” ligne 63
Cette option spécifie le répertoire principal
d'Apache. Les composants sont placés dans des sous-répertoires :
Cette
option prend comme valeur celle spécifiée par le paramètre "--prefix"
lors de la préconfiguration.
Ces
paramètres permettent l'utilisation des modules dynamiques (ou Dynamic
Shared Objects, DSO). L'ordre dans lequel ils sont
spécifiés est très important et il ne faut donc pas le modifier.
LoadModule
nommodule_modute libexec/nommodule.so ligne
205
ClearModuleList ligne 227
AddModule
nommodule.c
Si vous
souhaitez ajouter un nouveau module à Apache et que vous le compilez pour qu'il
soit dynamique, il faudra ajouter les paramètres "LoadModule"
et "AddModule" correspondants. Prenons par exemple un module mod_toto
: vous devrez ajouter la ligne juste après la dernière ligne "AddModule
...".
LoadModule
mod_toto_module libexec/mod_toto.so ligne 271
ClearModuleList
AddModule mod_toto.c" juste après la dernière
ligne "AddModule ...".
Actuellement,
la plupart des modules tiers sont fournis sous la forme d'un fichier source (mod_toto.c
par exemple). Pour l'installer simplement, utilisez la commande apxs disponible dans le répertoire bin de Apache :
# /usr/local/apache/bin/apxs -c -i -a mod_toto.c
Le module
va été compilé (-c), installé dans le bon répertoire (-i)
et activé (-a). Cette dernière option correspond à l'ajout des
lignes "LoadModule" et "AddModule"
adéquates dans le fichier httpd.conf.
httpd –l Permet de lister les modules
Cette
section décrit l'ensemble des paramètres utilisés par le serveur par défaut,
c'est-à-dire celui qui répond aux requêtes qui ne sont pas adressées à un hôte
virtuel. Si vous souhaitez héberger
plusieurs sites distincts sur un seul serveur, vous aurez besoin des hôtes
virtuels.
Nous les
détaillerons lors de la présentation de la troisième section, qui leur
est consacrée.
Si vous n'hébergez qu'un seul site, seule cette rubrique est importante. Nous
ajouterons également que l'ensemble des options de configuration du serveur
principal peut être repris dans la configuration d'un hôte virtuel.
Port 80 ligne 278
Cette
option spécifie le port sur lequel le serveur Apache attend des requêtes. 80
est la valeur par défaut et correspond à la valeur attribuée au service www par les instances de normalisation (RFC 1700). A noter que
comme pour tout port inférieur à 1024, un programme devant
utiliser le port 80 doit être lancé avec les droits de root. Si
vous n'avez pas les droits d'administration sur la machine, utilisez une valeur
supérieure, par exemple 8080.
User nobody ligne
292
Group
nobody
Les
directives User et Group permettent de spécifier un
utilisateur et un groupe fictif qui détermineront les droits d'accès du serveur
Apache, le but étant de limiter les risques en cas d'intrusion
par un pirate. Nous sommes donc ici dans le même cas de figure que celui
présenté précédemment avec MySQL. Cependant, et comme nous
l'avons évoqué ci-dessus, il n'est pas possible d'utiliser le port 80
si Apache ne tourne pas avec les droits root. La
subtilité réside dans le mécanisme de fonctionnement client/serveur
d'Apache.
Un
processus père, tournant avec les droits root, attend des
connexions sur le port 80. Lorsqu'une demande de connexion
arrive, le processus père crée un processus fils (tournant avec
les droits nobody) qui va être chargé de satisfaire les demandes
du client venant de se connecter. C'est donc un processus ayant des droits
restreints qui lit les fichiers (HTML, PHP, etc.)
et les envoie au navigateur de l'internaute.
Une règle
doit donc être observée : les fichiers constituant votre site doivent être
accessibles en lecture à l'utilisateur et/ou au groupe nobody.
Assurez-vous
que les nouveaux fichiers que vous copiez sont
en lecture pour tout le monde chmod a+r fichier.html
appartiennent à l'utilisateur nobody : chown nobody fichier.html
ou au groupe nobody : (chgrp
nobody fichier.html)
ServerAdmin
david@localdomain ligne 300
La
directive ServerAdmin permet simplement de définir une adresse
émail qui sera affichée sur les pages générées par Apache (pages d'erreur,
présentation de répertoire, etc.)
ServerName
openbsd.localdomain ligne 318
Cette
directive permet de forcer un nom d'hôte qui sera renvoyé au navigateur
client,par exemple www plutôt que le nom d'hôte réel.
Attention
toutefois, vous ne pouvez pas spécifier n'importe quel nom, celui que vous avez
choisi devra être défini dans le DNS local. Si ce n'est pas le
cas, il faudra yaccéder par son adresse IP.
Si vous laissez
la ligne commentée (avec la # devant), le serveur répondra avec le nom que vous
avez tapé dans votre navigateur.
Dans un
premier temps, laissez cette ligne commentée.
DocumentRoot
"/data/www/html" ligne 325
Cette
option permet de spécifier dans quel répertoire sont stockées les pages
présentes à la racine du site (par exemple http://nomserveur/test.html).
Ne changez pas cette option pour l'instant.
<Directory"/data/www/html">...</Directory> ligne 350
Ces
directives délimitent une liste d'options qui va s'appliquer à un répertoire
spécifique.
La
directive "Options" va déterminer les comportements
généraux du répertoire.
La
directive "AllowOverride" permet de spécifier si
certaines options définies par la directive Options vont pouvoir
être surchargées par l'utilisation d'un fichier d'accès (voir AccessFileName
ci-dessous).
Les
directives "Allow from" et "Order" déterminent
qui a accès aux fichiers contenus dans ce répertoire, et dans quel ordre les
autorisations sont gérées : d'abord les exclusions ou d'abord les
autorisations.
<lfModule
mod_userdir.c>...</lfModule> ligne 371
Ces
directives délimitent une liste d'options à n'appliquer que si le nom de module
spécifié (mod_userdir dans ce cas) a été activé au niveau de la
première section par les directives
LoadModule
et AddModule ligne 379
UserDir
public_html
Dans le cas
où le module mod_userdir est chargé, cette option permet de
spécifier un nom de répertoire qui, s'il existe dans le répertoire de base (home
directory) d'un utilisateur local du serveur Apache, va lui
permettre d'y stocker des pages. Pour y accéder, il suffira de saisir comme URL
http://nomserveur/~nomutilisateur/.
Attention,
le serveur Apache ayant les droits de l'utilisateur nobody,
le répertoire de base ainsi que le répertoire pour les pages des utilisateurs
devront lui être accessibles. Pour ce faire, donnez leur les droits en lecture
et en parcours :
# chmod
755 -nomutilisateur
# chmod
755 ~/public_html
Puis donnez
les droits en lecture aux fichiers contenus dans le répertoire public_html
# chmod -R 755 ~/public_html/*
Si vous ne
souhaitez pas utiliser cette fonctionnalité, commentez les lignes
LoadModule et AddModule
correspondantes dans la première section du fichier httpd.conf.
Directorylndex
index.html
Si le
module mod_dir est chargé (voir IfModule ci-dessus),
cette directive permet de spécifier des noms de fichiers qu'Apache
va considérer comme noms de page par défaut.
Ceci permet de taper une URL sans spécifier un nom de fichier
supplémentaire (http://nomachine/test/ plutôt que http://nomachine/test/index.html).
Les noms doivent être séparés par des espaces, et l'ordre dans lequel ils sont
saisis conditionne la priorité dans le cas où deux fichiers "par
défaut" seraient présents au même endroit.
Attention !
Lorsque aucun nom de fichier n'est fourni, Apache balaye l'ensemble des
fichiers du répertoire pour déterminer l'existence ou non de pages "par
défaut". Donc dans un souci de performance, ne saisissez pas une liste
trop longue. Vous pouvez ajouter index.php devant index.html.
AccessFileName
.htaccess
Cette
directive permet de spécifier le nom d'un fichier qui, s'il est présent dans un
répertoire, va permettre de spécifier des règles de sécurité pour l'accès aux
autres pages de ce répertoire.
C'est la présence d'un tel fichier qui fait qu'une fenêtre vous demandant votre
login et votre mot de passe vous est présentée. Un
tel fichier est utile, par exemple, pour protéger un répertoire contenant les
pages d'administration de votre site.
Le fichier
d'accès permet également de "surcharger" certaines
options définies dans le fichier httpd.conf, c'est-à-dire demander un
comportement différent et spécifique pour un répertoire. Cela est intéressant
si votre site est hébergé et que vous n'avez pas donc pas la possibilité de
jouer sur la configuration de Apache. A noter que ce fichier permet
également de spécifier certains options pour PHP. Le choix ou non
d'utiliser les fonctionnalités apportées par ce fichier n'est pas évident.
La
problématique reste celle du bon équilibre souplesse/performance. Si
l'option AccessFileName existe, chaque fois qu'Apache ouvrira un répertoire à la
recherche d'un fichier, il cherchera un fichier du nom de ce qui a été spécifié
lors de la configuration. Cela ajoute donc une opération et a donc un impact
certain sur les performances.
Par contre,
on dispose de fonctionnalités appréciables. Au contraire, si cette ligne est
commentée (symbole # au début de la ligne), Apache n'effectuera pas la
recherche d'un fichier. Les performances ne seront pas impactées mais on perd
en souplesse.
HostnameLookups
Off
Cette
directive conditionne le fait qu'Apache va essayer (valeur On) ou non (valeur
Off) de résoudre l'adresse IP du client qui se connecte à lui
pour l'écrire dans les journaux d'accès. Si cette option rend les
journaux plus explicites, l'impact sur les performances est généralement trop
important. Il vaut donc mieux laisser à "Off"
ErrorLog /usr/local/apache/logs/errorJog
CustomLog /usr/local/apache/logs/accessJog common
ErrorLog (journal d'erreur) et CustomLog (journal personnalisé, i.e. journal d'accès) permettent de spécifier
le chemin et le nom du fichier contenant respectivement les erreurs d'accès
(pages non trouvées, etc.) et les accès réussis. CustomLog
accepte en plus un paramètre qui correspond à un format de journal,
c'est-à-dire une plus ou moins grande richesse des informations journalisées.
Les formats pour le journal d'accès sont déterminés par la directive LogFormat.
Pour
obtenir un maximum d'informations sur les visiteurs, il est bien plus
intéressant d'utiliser le mode combined en lieu et place de common.
Mais dans ce cas, le volume des journaux devient vite très importants.
Pour mieux les gérer, il suffit d'avoir recours à un programme permettant "d'éclater" les journaux, le plus facile étant une séparation basée sur la date. L'outil cronolog est parfaitement indiqué, car il permet de spécifier des noms de fichiers et/ou de répertoires en se basant sur la syntaxe de strftime. Par exemple, %Y représente l'année courante sur quatre chiffres, %m le mois courant sur deux chiffres, etc. Pour connaître l'ensemble des possibilités, faites
# man
strftime
Tout
d'abord, commentez la ligne CustomLog /usr/local/apache/logs/accessJog
common (ajout d'un dièse # au début de la ligne) afin de ne plus
utiliser le mode standard. Commentez également la ligne contenant ErrorLog.
Ensuite,
téléchargez cronolog et décompactez l'archive:
# tar
xvfz cronolog-1.6.1 .tar.gz
#cd
cronolog-1.6.1
Préparez la
configuration :
#
./configure -prefix=/usr/local/cronolog-1.6.1
Compilez et
installez cronolog :
# make
install
Nous avons
choisi de garder les noms de fichier accessJog et errorJog,
mais ceux-ci vont être séparés mensuellement. Un répertoire par année, et un
sous -répertoire par mois.
ErrorLog "l/usr/local/cronolog-1.6.1/sbin/cronolog
/usr/local/apache/logs/%Y/%m/error_log1'.
N.B. : Le caractère avant le chemin vers
cronolog est un pipe ("|").
Alias /icons/ "/usr/local/apache/icons/"
La
directive Alias permet de créer un lien entre un répertoire dans l'arborescence
Web et un répertoire dans l'arborescence du système de fichiers du serveur.
Ainsi, avec
la directive ci-dessus, une requête sur l'URL http://nomserveur/icons/test.gif retournera le fichier /usr/local/apache/icons/test/gif.
Attention, si l'alias est défini avec un slash
à la fin (le symbole "/"), il est nécessaire de taper un slash (ou de
spécifier un fichier) dans l'URL pour accéder aux données pointées par
l'alias.
Par
exemple, la directive Alias /doc/
"/usr/local/apache/htdocs/manual/" permettra d'obtenir le
contenu du répertoire manuel si vous saisissez http://monserveur/doc/ ou http://monserveur/doc/index.htmll
Si vous
tapez http://monserveur/doc , Apache
recherchera un sous-répertoire doc dans l'arborescence standard des documents
(voir DocumentRoot). La directive Alias apporte une
certaine souplesse en évitant de devoir dupliquer certaines données que l'on
voudrait rendre accessible.
Cependant,
le fait de mettre à disposition des fichiers hors de l'arborescence standard
pouvant présenter des risques, il est d'usage d'associer à une directive Alias
une directive Directory afin d'instaurer certaines règles de sécurité.
AddType
application/x-httpd-php3 .php3
ErrorDocument
404 /missing.html
Les
directives ErrorDocument permettent de personnaliser les pages présentées en cas d'erreur.
Les paramètres de la directive sont tout d'abord le code HTTP
pour lequel on veut personnaliser, puis soit du texte précédé d'une double
quotte (par exemple "Page introuvable), soit une URL. Dans
ce dernier cas, l'URL ne doit pas forcément désigner un fichier HTML statique :
cela peut être un script Péri (/cgi-bin/erreur404.pl par exemple), une page PHP,
etc.
N.B. : les codes d'erreur les plus
courants sont 404 (page introuvable), 500 (erreur interne du serveur) et 403
(accès interdit).
La rubrique
Virtual Hosts (hôtes virtuels) permet à Apache de gérer plusieurs
sites/domaines-différents avec le même serveur.
Il existe
deux types d'hôtes virtuels : ceux
basés sur l'adresse IP et ceux basés sur le nom.
Attention toutefois, ces derniers s'appuient
sur des spécificités du protocole HTTP dans sa version 1.1,
même si.cela ne devrait plus être un problème à l'heure actuelle car tous les
navigateurs récents gèrent ce protocole.
.
Lorsque
vous avez terminé les changements dans le fichier de configuration,
arrêtez
puis redémarrez Apache :
# /usr/local/apache/bin/apachectl restart
Dans /usr/local/apache
/bin Contient
tous les exécutables
/cgi-bin Contient
tous les scripts CGI
/conf Contient
tous les fichiers de configuration
/htdocs Contient toutes les
pages Web (htm, html, php)
/icons contient des icônes qui servent notamment
pour identifier les types de fichiers
/includes Contient
tous les includes d’Apache
/libexec Contient
les modules
/logs Contient
les fichiers journaux
/man Aide
d’apache
/proxy Apache
peut être utilisé comme Proxy, c’est le répertoire cache pour
cette fonction.
Le
répertoire de log contient essentiellemnt deux fichiers :
access.log listant
les accès au serveur
error_log listant
les erreurs en tout genre
Le
répertoire de module libexec contient tout les modules utilisables par Apache.
N.B :un
module est une extension logicielle à Apache, lui permettant par exemple
d'interpréter le PHP4 (module libphp4.so), ou alors de créer des hôtes
virtuels (module mod_vhost_alias.so).
Ci-dessous,
une liste des modules faisant partie de la distribution Apache. Voir aussi la
liste des modules par ordre alphabétique de toutes les directives d'Apache (http://httpd.apache.org/docs/mod/directives.html). Pour
les modules d'Apache qui ne font pas partie de la distribution, vous pouvez
consulter http://modules.apache.org
Base
Fonctionnalités de base
d'Apache
mod_env
Apache 1.1 et sup Passage
d'environnement aux scripts CGI
mod_setenvif Apache 1.3 et sup Définition de variables d'environnement en
fonction des informations client
mod_unique_id Apache 1.3 et sup Génération d'identifiants uniques de
requête
mod_mime
Détermination du type
des documents en fonction de l'extension du fichier
mod_mime_magic Détermination du type des documents en fonction de
"nombres magiques"
mod_negotiation Négotiation de contenu
mod_alias
Association de différentes parties
du système de fichier de l'hôte dans l'arborescence
des documents, et redirection des URL.
mod_rewrite Apache 1.2 et supérieur Association des URI à des fichiers en
utilisant des expressions régulières
mod_userdir Répertoires personnels d'utilisateurs
mod_speling Apache 1.3 et + Correction automatique d'erreurs
de frappe mineures dans les URL
mod_vhost_alias Apache 1.3.7 et + Support d'hôtes virtuels dynamiquement
configurables
mod_dir
Gestion de base des
répertoires
mod_autoindex Création automatique des listes des répertoires
mod_access Contrôle
d'accès basé sur le nom du client ou son adresse IP
mod_auth
Authentification des
utilisateurs à partir d'un fichier texte
·
Créer
un répertoire au nom de l’utilisateur /home/http/toto/index.html
<html>
<head>
<title> Page
de toto </title>
</head>
<body
bgcolor=”#E3E3E3” text=”#000000”>
<center>
<H2> Page de toto ds /home/http/toto </H2></center>
</body>
</html>
Modifier httpd.conf
<IfModule
mod_userdir.c>
Userdir /home/http
ALIAS :/localhost/icons veut dire que dans
usr/local/apache/htdocs, il y a un répertoire icons
Dans votre
navigateur lancer : 127.0.0.1/~toto/index.html
Ce qui
allait devenir PHP a été créé en 1995 par le Danois Rasmus Lerdorf.
Son seul et unique but à l'époque était de savoir qui venait lire son CV
sur Internet. Etant à son compte, il envoyait des lettres de motivations à
diverses entreprises, et mentionnait l'URL de son site.Il avait donc écrit un
script CGI en langage Perl qui ajoutait des balises dans le code HTML qui
récupéraient les informations sur les visiteurs.
Pour
impressionner ses visiteurs, il choisit de rendre ses statistiques d'accès
publiques. Il baptisa cet outil PHP-Tools (PHP pour Personal Home Page) car ce n'était pour lui qu'un
outil destiné à sa page personnelle (home page). C'est également à ce
moment que, suite à plusieurs demandes concernant la disponibilité de son
script, il choisit de le diffuser comme freeware (ou graticiel
;-)...le concept de logiciel libre n'existait pas à l'époque.
Suite à sa recherche d'emploi, Rasmus obtint un contrat à
l'Université de Toronto où il devait travailler sur un système de connexion à
Internet pour les étudiants.
Il devait développer une interface de gestion Web accédant
à la base de données des étudiants hébergée sur un gros système IBM et
permettant d'autoriser la connexion en fonction du paiement effectué par chaque
étudiant.
Cette base devait pouvoir être mise à jour en temps réel. Vu qu'il
n'existait alors aucun outil d'interfaçage entre HTML et base de
données, Rasmus eut l'idée d'ajouter des balises spécifiques dans les
pages HTML, celles-ci étant interprétées par le compilateur C.
Il donna à cet ensemble de balises le nom de FI pour "Forms Interpréter" (interpréteur de formulaire)
car elles permettaient de récupérer des informations saisies dans des
formulaires puis de les convertir afin de les exporter vers d'autres systèmes.
En combinant les fonctionnalités de PHP-Tools et de FI,
Rasmus réalisa en 1996 la deuxième version de PHP, PHP-FI.
Bien qu'il lui soit venu l'idée de commercialiser son produit, il
s'abstint devant les messages reçus de nombreux programmeurs à travers le monde
qui lui envoyait des corrections de bugs et des améliorations. PHP
est dès lors devenu un projet Open Source et Rasmus continue à être l'un des principaux développeurs,
même si le moteur d'interprétation de PHP a été complètement
réécrit entre temps.
Lieu : http://www.php.net/downloads.php PHP 4.3.1 (tar.gz)
manuel : http://dev.nexen.net/docs/php/annotee/manuel_tocd.php
manuel français : http://www.php.net/download-docs.php
Exemple 1-1. Exemple d'introduction
<html>
<head>
<title>Exemple</title>
</head>
<body>
<?php
echo "Bonjour, je suis un script
PHP!";
?>
</body>
</html>
Pour installer PHP, placez-vous dans le
répertoire où vous avez chargé les sources, et décompactez les sources de PHP :
tar xvfz php-4.0.6.tar.gz
cd php-4.0.6
./configure \
--with-apxs=/usr/local/apache/bin/apxs\
--enable-inline-optimization \
--enable-debug=no \
--enable-safe-mode \
--enable-calendar \
--enable-ftp \
--enable-sysvsem \
--enable-sysvshm \
--enable-trans-sid \
--with-regex=system \
--disable-static \
--with-regex=system \
--with-mm=/usr/local \
--with-mysql \
--with-freetype-4bit-antialias-hack \
--with-gd-native-tt \
--enable-gd-native-tt \
--enable-freetype-4bit-antialias-hack\
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-tiff-dir=/usr\
--with-zlib=/usr \
--with-pdflib=/usr/local/src/pdflib-4.0.3/bind/c
--with-apxs=/usr/local/apache/bin/apxs \
indique que PHP va être compilé comme un
module dynamique, le paramètre passé correspond
au chemin vers le binaire apxs.
--enable-debug=no
indique que PHP ne fournira pas d'informations étendues en cas
d'erreur. Ce paramètre est à
utiliser pour un serveur de production.
--enable-safe-mode
permet à PHP de contrôler certains
paramètres d'exécution de scripts et assurer une meilleure sécurité.
--with-regex=system
indique à PHP d'utiliser la
librairie d'évaluation des expressions régulières du système plutôt que celle inclue avec PHP. Validation
par le noyau du système.
--with-mysql=/usr/local/mysql
spécifie le support de la base de
données MySQL.
--with-gd=/usr/local
va permettre à PHP de générer des images à la volée en se basant
sur la librairie GD compilée précédemment.
--with-pdflib=/usr/local
permet à PHP de générer des fichiers
PDF à la volée en se basant sur la librairie PDFLib (voir ici pour le détail des fonctions).
Les options calendar, ftp,
sysvsem et sysvshm ont pour but d'apporter des
fonctionnalités supplémentaires à PHP. Elles ne sont en aucun cas
obligatoire. Pour plus de détails, vous pouvez consulter la liste des
différentes options de compilation, disponible sur le site officiel PHP.
Remarque : Il faut que les package flex-5.5.4a-libtiffdevels
soit installer
Remarque : le paramètre --enable-track-vars
n'est pas spécifié car il est implicite depuis la version 4.0.2 de PHP.
make
make
install
Le répertoire
/usr/local/apache/conf contient:
http.conf le fichier de
configuration d'Apache
mime.types fixe le type de fichier
suivant l'extension du dit fichier
(.doc=msword,.ps=postscript,...),
ça permet au client qui se connecte sur le serveur, de savoir comment interpréter le fichier suivant
son extension.
magie sert pour le
module mod_mime_magic
php.ini pour contrôler
certains aspects de PHP
Le fichier de configuration se trouve dans /usr/local/apache
et se nome httpd.con.
f
Servername nom_du_serveur Rajouter
ligne 327
AddType application/X-httpd-php .php .php3
.php4 .phtml ligne 828
AddType application/X-httpd-php-source –phps
LoadModule
php4_module libexec/libphp4.so
AddModule mod_php4.c
DirectoryIndex
index.html index.htm index.php3 index.php index.php4
·
Arrêtez
puis redémarrez Apache :
/usr/local/apache/bin/apachectl restart
Pour apprendre PHP dirigez-vous vers le site : www.nexen.net
Vous devez ensuite copier le fichier php.ini-dist dans le
répertoire /usr/local/lib sous le nom php.ini.
cp
/usr/local/src/php-4.0.6/php.ini-dist
/usr/local/lib/php.ini
Tout
d'abord, créez le fichier test.php
contenant le code suivant dans /usr/local/apache/htdocs/ :
<?
phpinfo ( );
?>
Tapez dans
votre navigateur 127.0.0.1/test.php
Maintenant,
quelques tests des fonctions graphiques fournies par la librairie GD (n'oubliez pas de copier le fichier arial.ttf (la police Arial de Windows) dans le
répertoire /data/fonts).
Tout d'abord, la création d'une image au format PNG.
Créez un fichier imagel.php contenant le code suivant :
<?php
Header ("Content-type: image/png");
$im = imagecreate (400, 30);
$black = ImageColorAllocate ($im, 0, 0, 0);
$white = ImageColorAllocate ($im, 255, 255, 255);
ImageTTFText ($im, 20, 0, 10, 20, $white,
"/data/fonts/arial.ttf", "Testing... Oméga:
Ω");
ImagePng
($im);
ImageDestroy
($im);
?>
Appelez le
fichier imagel.php dans votre navigateur
Passons
maintenant au format JPEG. Créer un fichier image2.php
avec le code suivant :
<?php
Header ("Content-type: image/jpeg");
$im = imagecreate (400, 30);
$black = ImageColorAllocate ($im, 0, 0, 0);
$white = ImageColorAllocate ($im, 255, 255, 255);
ImageTTFText ($im, 20, 0,10, 20, $white,
"/data/fonts/arial.ttf", "Testing... Oméga:
Ω");
ImageJpeg
($im);
ImageDestroy
($im);
?>
Appelez le
fichier image2.php dans votre navigateur
Le fichier de conf d'Apache se trouve
sous /usr/local/apache et se nomme httpd.conf, voici les points que je juge important dans le fichier:
(...)
# —-.,.——.....— Server Configuration ——————————
# ServerType is
either inetd, or standalone.
# vous pouvez soit lancer Apache par le super daemon inetd
(config dans /etc/inetd.conf) soit tout seul avec un script dans /etc/rc.d/init.d, à noter qu'avec la première méthode vous pouvez
contrôler l'accès avec les TCP_Wrappers (hosts.deny, hosts.allow)
# voir la note en bas du paragraphe pour les
avantages de l'un ou de l'autre
# moi j'ai choisi lancement en standalone
(voir paragraphe suivant)
ServerType
standalone
(...)
# Do NOT add a slash at thé
end of thé directory path. Répertoire
racine d'Apache
ServerRoot "/usr/local/apache"
(...)
# PidFile: Thé file
in which thé server should record its process identification number when it
starts.
# C'est dans ce fichier qu'on trouvera
l'identification du process d'Apache c'est utile pour ne pas
# lancer deux fois Apache par exemple PidFile/usr/local/apache/logs/httpd.pid
(...)
# Limit on total number of
servers running, Le., limit on thé number of clients who can
# simultaneousiy connect — if this
limit is ever reached, clients will be LOCKED OUT, so it should
# NOT BE SET TOO LOW. # It is intended
mainly as a brake to keep a runaway server from taking
# Unix with it as it
spirals down...
# ici on fixe le nombre de clients max qui
peuvent se connecter à un moment donné
MaxClients150
(...)
# Suit ensuite une liste de modules, ceux
avec un # devant ne seront pas inclus
LoadModule vhost_alias_module libexec/mod_vhost_alias.so
LoadModule
env_module libexec/mod_env.so
LoadModule
config_log_module libexec/modJog_config.so
LoadModule
mime_magic_module libexec/mod_mime_magic.so
LoadModule
mime_module libexec/mod_mime.so
LoadModule
negotiation_module libexec/mod_negotiation.so
LoadModule
status_module libexec/mod_status.so
LoadModule
info_module libexec/mod_info.so
(...)
Pour chaque module on doit maintenant la routine
AddModule
ClearModuleList
AddModule
mod_vhost_alias.c
AddModule mod_env.c
AddModule
mod_log_config.c
AddModule
mod_mime_magic.c
AddModule mod_mime.c
AddModule mod_negotiation.c
AddModule mod_status.c
AddModule mod_info.c
AddModule
mod_include.c
AddModule
mod_autoindex.c
AddModule mod_dir.c
AddModule mod_cgi.c
(...)
# Port: Thé port thé standalone listens to.
# For ports <
1023, you will need httpd to be run as root initially.
# Numéro
de port pour le serveur, traditionnellement à 80
Port 80
(-)
# On lance initialement httpd en tant que root, puis
immédiatement
# c'est l'utilisateur nobody (groupe nobody) qui en devient le propriétaire
# ainsi s'il y a une faille dans Apache, le hacker
au lieu de devenir root devient nobody avec les
# droits qui vont avec
# pour vérifier que nobody est bien le
proprio : ps aux | grep
httpd
User nobody
Group nobody
(...)
# ServerAdmin: Your address, where problems with the server should be
# e-mailed. This address
appears on some server-generated pages, such as error documents.
# En cas de problème un émail sera envoyé au webmaster, mettez
donc ici l'adresse du webmaster
# DocumentRoot: The directory out ofwhich you will serve your
# documents. By default, ail
requests are taken from this directory, butsymbolic links and aliases
# may be used to point to other locations.
# C'est dans ce répertoire qu'on va trouver la page d'accueil d'Apache
DocumentRoot
"/usr/local/apache/htdocs"
(...)
# UserDir: The name ofthe directory which is appended onto a user's homedirectory
if a –user
# request is received.
# Chaque utilisateur pourra mettre ses pages dans
sa homedirectory dans un répertoire
# public_html, les
pages seront accessibles à l'URL http://localhost/~user
<lfModule
mod_userdir.c>
UserDir public_html
</lfModule>
(...)
# ErrorLog: The location ofthe
error log file. If you do not specify an ErrorLog directive
within a
# <VirtualHost> container, error messages relating to that virtual host
will be logged hère. If you *do*
# define an error logfile for a <VirtualHost> container, that host's
errors will be logged there and not
# here.
# L'emplacement du fichier de log peut ne pas vous convenir, si vous voulez le
placer dans
# /var/log/httpd il faut modifier ici
ErrorLog/usr/local/apache/logs/error_Iog
#The location and format ofthe access logfile (Common Logfile Format). If you do not define any
# access logfiles within a <VirtualHost> container, they will be logged
here. Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be logged
therein and *not* in this file.
# De même pour
l'emplacement du fichier de log des accès à apache c'est cette variable qu'il
faut
# modifier
CustomLog
/usr/local/apache/logs/access_log common
# Directorylndex: Name of the file or files to use as a pre-written HTML directory
index. Separate multiple entries with spaces.
# liste des
fichiers d'entrée des pages
<IfModule
mod_dir.c>
Directorylndex
index.html index.htm index.php3 index.php index.php4
</lfModule>
# priorité
dans les langages à utiliser, mettez fr en premier
IfModule
mod_negotiation.c>
LanguagePriority fr en da ni et de el itja
pi pt pt-br Itz ça es sv
</lfModule>
# Apache peut se
comporter comme un proxy comme squid par défaut cette fonction n'est pas activée
# Proxy Server directives. Uncomment thé following line to enable thé
proxy server:
# ProxyRequests On
# To enable the cache as well, edit and uncomment the following lines:
# CacheRoot /var/cache/httpd
# CacheSize 5
# CacheGcInterval 4
# CacheMaxExpire 24
# CacheLastModifiedFactor 0.1
# CacheDefaultExpire 1
# NoCache a_domain.com another_domain.edujoes.garage_sale.com
NOTE "Anciennement" on trouvait un fichier
srm.conf et access.conf, ils peuvent maintenant complètement être
intégrés dans httpd.conf
On prendra le fichier apachectl se
trouvant sous /usr/local/apache/bin et on le placera sous
/etc/rc.d/init.d, et on le renommera httpd
cp
/usr/local/apache/bin/apachectl /etc/rc.d/initd/httpd
Puis on éditera le fichier /etc/rc.d/rc. local
et on ajoutera en fin de fichier la ligne suivante :
./etc/rc.d/initd/httpd
start
Le problème avec le répertoire public_html des utilisateurs et qu'il faut mettre 755 au niveau
de la home directory, ce qui est particulièrement gênant au niveau sécurité.
Vous pouvez spécifier que chaque utilisateur doit créer ses pages sous /home/http/login-utilisateur
en écrivant pour la variable UserDir
UserDir /home/httpd
Ainsi pour l'utilisateur toto quand
vous taperez comme URL > http://serveur-apache/~toto , apache
ira chercher le fichier index.htm sous /home/httpd/toto .
On peut aller plus loin en spécifiant un répertoire particulier, /home/httpd/toto/html
par exemple, en écrivant:
UserDir
/home/httpd/*/html
Si vous ne voulez pas mettre en place un
serveur DNS, vous avez un moyen plus simple, les
alias. Concrètement, votre serveur
s'appelle obelix , vous voulez rendre accessible les fichiers html se trouvant sous /usr/doc/html , les utilisateurs devront
taper dans leur navigateur préféré:
http://obelix/doc.
Pour cela dans votre fichier
/etc/httpd/conf/httpd.conf, vous allez rajouter:
Alias /icons/
"/usr/Iocal/apache/icons/"
Alias /doc "/usr/doc/html/"
NOTE Si vous mettre/doc/à la place de /doc dans
l'URL il faudra taper http://obelix/doc/, si vous omettez le dernier /,
vous aurez une erreur
Le système d'authentification est déclenché
lorsque le serveur détecte dans le répertoire contenant le document à
transmettre la présence du fichier .htaccess dont la lecture lui indiquera quel est le type de protection en
service dans ce répertoire.
Ce système d'authentification est très
souple puisqu'il va permettre de gérer différents répertoires selon des
critères d'accès différents.
Il faut dé commenter maintenant les lignes
suivantes dans le fichier httpd.conf:
Pour ce faire, la première étape va
constituer en la création de la base de données qui est un fichier de nom .htpasswd
et qui va contenir les caractéristiques des personnes autorisées à accéder aux
documents.
Dans un serveur de type NCSA un utilitaire
est fourni pour créer et gérer cette base de données. Il s'agit du programme
htpasswd accessible directement sous Unix.
On peut créer d'abord un répertoire
(basedenoms par exemple) qui va contenir la base de données et on lui met
des droits de lecture pour tout le monde. Notez bien que ce répertoire peut se
situer n'importe où sur le site.
% mkdir basedenoms
% chmod 755
basedenoms
%
Après s'y être déplacé (cd basedenoms),
on crée ensuite simultanément (option -c) la base de données .htpasswd et le premier utilisateur avec son
mot de passe
% htpasswd -c
.htpasswd david
Adding password for
david.
New password:
Ré-type new
password:
%
Remarquez que dans cet exemple le fichier
.htpasswd se trouvera donc précisément dans le répertoire basedenoms.
Remarque : sur pc, la commande htpasswd n'est pas livrée en standard
avec le système.
On peut ensuite ajouter d'autres
utilisateurs (cette fois-ci sans l'option de création -c)
% htpasswd .htpasswd
stef j
Adding
user stef ^
New
password:
Ré-type
new password: ;
%
Pour contrôle, vous pouvez visualiser le
contenu de la base :
% cat .htpasswd
david:bp3rCaQn8clSw
stef:D1.766H0012hA
%
Vous pouvez constater que ce fichier
contient simplement les noms des utilisateurs suivis de leur mot de passe
crypté.
Il est à remarquer qu'afin de
"diminuer" leur lisibilité au moment du passage sur le réseau, les
mots de passe sont encodés. Mais il ne s'agit en aucun cas d'un en cryptage
sécurisé. Par ailleurs, exécuter une seconde fois cette commande pour un même
utilisateur ne fera que changer son mot de passe.
Si vous désirez retirer un utilisateur, il
suffit d'éditer le fichier .htpasswd et de supprimer la ligne
correspondant à cet utilisateur.
Remarque : La création et la mise à jour du fichier .htpasswd peuvent également
être effectués par des scripts ou des programmes CGI, la seule difficulté
résidant dans le codage du mot de passe pour qu'il puisse être reconnu par le
serveur.
Pour cela, les langages de script ou
d'écriture de programmes CGI offrent en général une fonction qui permettra de
le faire.
Par exemple, dans un script php,
vous pouvez utiliser la fonction crypt(chaine).
Une fonction analogue existe également en C.
On se positionne ensuite dans le répertoire
contenant les fichiers HTML à protéger.
(dans notre exemple ces fichiers ne seront
pour le moment éventuellement accessibles qu'aux utilisateurs david et stef).
On crée dans ce répertoire le fichier .htaccess qui devra contenir les lignes
suivantes :
AuthName message
AuthUserFile /usr/local/bin/www/httpd_1 .S/basedenoms/.htpasswd
AuthGroupFile /dev/null
AuthType Basic
<limitGET>
require valid-user
</Limit>
Le texte situé derrière le nom AuthName correspond au message que vous désirez voir afficher dans la boîte
de dialogue lors de la demande d'authentification.
Pour la ligne AuthUserFile
vous devez donner le chemin complet du fichier, incluant le chemin jusqu'à
votre répertoire racine (obtenu avec la commande pwd).
La ligne suivante (require) signifie
qu'aucune distinction n'est faite parmi les membres de la liste.
Si vous vouliez choisir, parmi les membres
de la liste figurant dans .htpasswd, ceux auxquels vous voulez donner
les droits d'accès, il faudrait les citer nommément :
AuthName message
AuthUserFile
/usr/local/bin/www/httpd_1 .S/basedenoms/.htpasswd
AuthGroupFile
/dev/null
<limit GET>
require user durand dupont dupond
</Limit>
Dans cet exemple, seuls durand, dupont
et dupond pourront passer la barrière !
C'est également grâce à la directive require qu'il est aussi possible de gérer des groupes d'utilisateurs. Pour
ce faire il suffit par ailleurs de créer un fichier .htgroup (toujours
dans un répertoire de son choix). Ce fichier sera structuré comme dans
l'exemple suivant qui défini trois groupes
(non forcément disjoints) :
admin-grp: dubois etienne gaillard
systm-grp: perrot
dumas
visit-grp: dufour
Chaque répertoire pourra être ensuite ouvert
au(x) groupe(s) concerné(s) comme l'indique par exemple le fichier .htaccess de l'exemple suivant autorisant les groupes
admi-grp et systm-grp à accéder aux fichier HTML contenus dans le même
répertoire
AuthName message
AuthUserFile
/usr/local/bin/www/httpd_1 .S/basedenoms/.htpasswd
AuthGroupFile
/usr/local/bin/www/httpd_1.3/basedenoms/.htgroup
AuthType Basic
<limit GET>
require group
admin-grp
require group
systm.grp
</Limit>
<limit> est un bloc contenant des sous-directives permettant de définir les
droits d'accès associés à une ou plusieurs méthodes d'accès (GET, PUT).
La directive require est utilisée
dans le cas d'accès par utilisateur et mot de passe et spécifie quels sont les
utilisateurs ou groupes ayant accès aux pages du répertoire où se trouve le
fichier .htaccess.
Elle peut avoir les formes suivantes :
--- require valid-user : tous les membres de la liste .htpasswd sont autorisés à
lire les fichiers du répertoire
-- require group groupel groupe2 : seuls les membres de la liste générale qui font aussi partie des
groupes groupel et groupe2 sont autorisés.
--require user usagerl usager2 usagers : seuls usagerl, usager2 et usagers auront les droits, à condition qu'ils
soient aussi dans .htpasswd
Remarque : Si vous souhaitez établir une hiérarchie de répertoires pour lesquels
les droits se restreignent au fur et à mesure que l'on descend dans la
hiérarchie, il suffit que les répertoires attenant à chacun des répertoires
concernés fasse référence au même fichier des mots de passe (.htpaswd).
Dans ce cas, pourvu qu'un utiisateur n'aille
que dans les lieux qui lui sont permis, son mot de passe ne lui sera demandé
qu'une unique fois !
Dans cette méthode on va autoriser ou
interdire l'accès à un groupe d'utilisateurs appartenant à un même domaine.
Dans les exemples suivants on offrira d'abord l'accès aux pages HTML
exclusivement aux utilisateurs venant du domaine .ch et du
domaine .enst.fr puis on interdira l'accès uniquement aux
utilisateurs de la machine ulysse.enst.fr.
Ici, seule la présence du fichier .htaccess
est nécessaire. Son contenu est bien sûr différent du cas de l'authentification
par nom et mot de passe.
Deux possibilités sont donc offertes :
·
* On
refuse tous les accès sauf ceux qui sont précisés
AuthUserFile
/dev/null
AuthGroupFile
/dev/null
AuthName
AccesRestreint
AuthType Basic
<limit GET>
order deny,allow
deny from all
allow from .ch
allow from .enst.fr
</Limit>
·
* On
accepte toys les accès sauf ceux qui sont précisés
AuthUserFile
/dev/null
AuthGroupFile
/dev/null
AuthName
InterditPartiel
AuthType Basic
<limit GET>
order allow,deny
allow from all
deny from
ulysse.enst.fr
</Limit>
II est possible de combiner accès par mot de
passe et accès par sous-domaine.
Dans ce cas, la présence des deux fichiers
.htpasswd et .htaccess est nécessaire.
Le contenu de ce dernier est bien sûr
différent de celui des cas précédents.
Deux possibilités sont offertes :
·
* On
autorise les accès depuis un certain sous-domaine plus des mots de passe
ailleurs
AuthUserFile
/usr/local/bin/www/httpd_1 -S/basedenoms/.htpasswd
AuthGroupFile /dev/null
AuthName AccesRestreint
AuthType Basic
<limit GET>
order deny,allow
allow from .enst.fr
require user martin
satisfy any
</Limit>
Dans cet exemple, sont autorisées les
personnes connectées depuis le sous-domaine .enst.fr ainsi que la
personne de nom martin (citée dans le fichier .htpasswd) qui peut se connecter d'un tout
autre endroit.
C'est la clause satisfy any qui permet l'une ou l'autre des deux autorisations.
·
* On
autorise les accès depuis un certain sous-domaine en faisant de plus intervenir
des mots de passe
AuthUserFile
/usr/local/bin/www/httpd_1 .S/basedenoms/.htpasswd
AuthGroupFite
/usr/local/bin/www/httpd_1 .S/basedenoms/.htgroup
AuthName
AccesRestreint
AuthType Basic
<limitGET>
order deny.allow
deny from all
allow from .enst.fr
require
groupintranet
satisfy all
</Limit>
Dans cet exemple, sont autorisés les
personnes connectées depuis le sous-domaine .enst.fr à condition
de faire partie du groupe intranet (défini dans .htgroup). C'est la clause satisfy all
qui permet la combinaison des deux conditions.
Cette possibilité est particulièrement utile
dans le cas où on a défini deux groupes non forcément disjoints et qu'on
souhaite ne donner l'accès qu'à l'intersection des deux groupes, sans remettre
en cause la constitution propre de chaque groupe.
Lorsque l'on protège un répertoire tous les
sous-répertoires sont automatiquement protégés.
Exemple d'utilisation sur Emma
Création de la directory contenant les mots
de passe :
mkdir/infres/emma/infgl/danzart/basedenoms
Création de la base et du premier
utilisateur :
htpasswd
/infres/emma/infgl/danzart/basedenoms/.htpasswd -c utilisateuri
Création ou modification d'un utilisateur :
htpasswd /infres/emma/infgl/danzart/basedenoms/.htpasswd
utilisateur2
Placer le fichier .htaccess dans le
répertoire devant être protégé. L'éditer en mettant
les directives de restriction souhaitées.
Cas d'erreur fréquent !
Si les fichiers de password ou
.htaccess ne sont pas autorisés en lecture pour tout le monde (o+r),
le serveur n'y aura pas accès et votre protection sera inefficace.
<Directory
/home/*/public_html>
AllowOverride Fileinfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
Orderallow,deny
Allow from all
</Limit> .
<LimitExcept GET POST OPTIONS PROPFIND>
Orderdeny.allow
Deny from all
</LimitExcept>
</Directory>
Ces lignes autorisent l'emploi du fichier
.htaccess dans les pages de vos utilisateurs (répertoire /home/*/public_html)
Maintenant quand à partir de votre
navigateur préféré quand vous allez rentrer comme URL
http://obelix/~olivier7reserve , vous aurez une fenêtre popup qui
vas'ouvrir vous demandant de rentrer votre nom d'utilisateur et le mot de passe
préalablement rentré.
Notez que pour que quelqu'un ne puisse jeter
un coup d'œil dans les fichiers .htaccess de vos utilisateurs, le
fichier httpd.conf, contient la directive suivante:
<Files ~ "^\.hf”>
Order allow,deny
Deny from all
Satisfy Ail
</Files>
On peut mettre en place des hôtes virtuels,
en d'autres termes un utilisateur pour un même serveur Apache croira en voir
plusieurs. Exemple, soit votre serveur Apache obelix (adresse IP
192.168.13.11), votre domaine breiziand.bz, on va créer les hôtes
virtuels www.asterix.breizland.bz et www.idefix.breizland.bz
qui vont pointer chacun vers un endroit différent du disque (respectivement /usr/local/asterix
et/usr/local/idefix chacun contenant des pages html).
Dans le fichier httpd.conf le module est déjà chargé :
LoadModule
vhost_alias_module libexec/mod_vhost_alias.so
AddModule
mod_vhost_alias.c
On va rajouter tout à la fin du fichier:
NameVirtualHost
192.168.13.11
<VirtualHost
192.168.13.11>
ServerName
obelix.breizland.bz
DocumentRoot/usr/local/apache/htdocs
ErrorLog
logs/obelix-error_log
TransferLog
logs/obelix-access_log
</VirtualHost>
<VirtualHost
192.168.13.11>
ServerName
www.asterix.breizland.bz
DocumentRoot
/usr/local/asterix
ErrorLog
logs/asterix-errorJog
TransferLog
logs/asterix-access_Iog
</VirtualHost>
<VirtualHost
192.168.13.11>
ServerName
www.idefix.breizland.bz
DocumentRoot
/usr/local/idefix
ErrorLog
logs/idefix-error_log
TransferLog
logs/idefix-access_log
</VirtualHost>
Relancez Apache en tapant:
/etc/rc.d/init.d/httpd
restart
Maintenant nous allons créer nos hôtes
asterix et idefix, pour cela vous avez deux méthodes:
·
rajouter
www.asterix.breizland.bz et www.idefix.breizland.bz
dans /etc/hosts sur la même ligne que votre serveur Apache (
obelix dans notre exemple).
192.168.13.11 obelix obelix.breiziand.bz www.asterix.breizland.bz
www.idefix.breizland.bz
Normalement si vous faites un ping sur
www.idefix.breizland.bz ça devrait marcher, pour les postes clients il
faudra rajouter la même ligne dans le fichier hosts (non nécessaire).
·
si
vous disposez d'un serveur DNS sur votre machine, au niveau de votre config DNS
dans votre fichier breiziand.bz qui se trouve sous /var/named vous devez rajouter tout à la fin:
www.asterix A
192.168.13.11
www.idefix A
192.168.13.11
Relancez le DNS en tapant:
/etc/rc.d/init.d/named
restart
Pour tester tapez dans un shell:
ping www.asterix.breizland.bz
Maintenant dans le champ URL de votre
navigateur préféré:
http://www.asterix.breizland.bz
Et là, normalement vous devriez voir
s'afficher la page que vous avez placé sous /usr/local/asterix
On suppose que vous avez installé, configuré
MySQL et créé les deux exemples de la page MySQL. On suppose aussi
que le serveur s'appelle obelix et l'utilisateur olivier.
Voici une page écrite en PHP qui va
accéder à la base de donnée essai et à sa table coord.
<?
$serveur="localhost";
$Iogin="olivier";
$pass="mot-de-passe";
$base="essai";
$table="coord";
$id=MYSQL_CONNECT($serveur,$login,$pass);
mysql_select_db($base);
$nom="hoarau";
$prenom="olivier";
$email="olivier.hoarau@fnac.net";
$query="INSERT
INTO Stable VALUES('$nom','$prenom','$email')";
$result=mysql_query($query,$id);
écho "Saisie terminée";
?>
Placer ce script dans ~/public_html
et appeler le bdl.php
Dans votre navigateur préféré, dans le champ
URL saisissez :
http://obelix/~olivier/bd1 .php
A priori y a pas grand chose qui s'est
passé, maintenant connecter vous à votre base
essai dans un shell
[olivier@obelix olivier]$ mysql -u olivier-p
essai
Enter password:
Welcome to thé MySQL
monitor. Commands end with ; or \g.
Your MySQL
connection id is 10to server version: 3.22.32
Type 'help' for
help.
mysql> SELECT *
FROM coord;
+-..-+—.—.+—..—.—.——.—+
| nom
| prénom | émail |
| hoarau | olivier | olivier.hoarau@fnac.net
|
+-.—+—.—.+..—.———..-.—+
1 row in set (0.00
sec)
C'est bon ça fonctionne. Passons à un
exemple plus pointu, on va entrer les informations concernant vos visiteurs
dans une base MySQL ,
créer la table telle que décrite dans
l'exemple 2 de la page MySQL, créer maintenant le script PHP.
<?
$page=getenv("HTTP_REFERER");
$ip=getenv(
"REMOTE_ADDR");
$host=gethostbyaddr($ip);
$d =
date("d/m/Y H:i:s");
$expI=getenv("HTTP_USER_AGENT");
$serveur="localhost";
$login="olivier";
$pass="mot»de-passe";
$base="essai";
$table="ref;
$id=MYSQL_CONNECT($serveur,$login,$pass);
mysql_select_db($base);
$query="INSERT
INTO $table VALUES('$d','$host','$ip','$expl','$page')";
$result=mysql_query($query,$id);
écho "$d
$host($ip) $expl $page";
?>
Nommez ce script bd2.php et placez le
dans ~/public_html .
Dans votre navigateur préféré tapez dans le
champ URL
http://obelix/~olivier/bd2.php
Vous devriez voir la date, le nom de votre
machine avec son adresse IP et des infos sur votre OS et votre navigateur. A
présent connectons nous à la base:
[olivier@obelix olivier]$ mysql -u olivier-p
essai
Enter password:
Welcome to thé MySQL
monitor. Commands end with ; or \g.
Your MySQL
connection id is 10 to server version: 3.22.32
Type 'help' for
help.
mysql> SELECT *
FROM ref;
+——————
+•——_—_——+->——— +-—_———— +—— +
| date | host |
ip | os |
page |
| 24/04/2000
08:34:05 | asterix.armoric.bz 1192.168.13.11 | Mozilla/4.61 [en] (X
"I" + —+ J- •L J.
1 row in set (0.00
sec)
C'est bon le visiteur a bien été pris en
compte.
Maintenant que vous savez comment Apache
fonctionne avec MySQL et PHP, laissez libre cours à votre
imagination.
phpMyAdmin est un ensemble de scripts PHP qui permet d'administrer des bases MySQL
à partir d'un navigateur. Vous pouvez le récupérer à l'URL
www.phpwizard.net/phpMvAdmin
. En détail phpMyAdmin permet de:
·
créer
et supprimer des bases de données,
·
éditer,
ajouter ou supprimer des champs,
·
taper
des commandes SQL,
·
gérer
les clés de champs,
…/…
Logiciel de création de base de données sur MySql
avec Interface Graphique.
Lieu : http://www.phpmyadmin.net/ phpMyAdmin-2.4.0-php.tar.gz
Manuel : http://www.phpmyadmin.net/documentation/
L'archive se présente sous la forme d'un
tarball phpMyAdmin-2.4.0-php.tar.gz ,pour décompresser:
tar xvzf phpMyAdmin-2.4.0-php.tar.gz
/usr/local/apache/htdocs
·
Cela
va créer dans le répertoire de travail un répertoire phpMyAdmJn-2.2.6.
·
Dans
ce répertoire on va éditer le fichier config.inc.php3.
·
On
doit d'abord indiquer l'URL pour atteindre phpMyAdmin.
$ifg[‘Pmabsolute
URI’]=’127.0.0.1/phpmyadmin{ ligne
26
127.0.0.1/phpmyadmin/index.php
$cfgPmaAbsoluteUrl = 'URL pour atteindre
phpMyAdmin (voir plus bas)';
On définit l'utilisateur pour accéder à la
base MySQL
$cfgServers[$i]['user'] = 'olivier'; // MySQL user
$cfgServers[$i]['password'] = 'mot-de-passe-en-clair';
Et maintenant pour avoir la version
française, dans le même fichier au lieu de:
$cfgDefaultLang = 'en';
On va mettre
$cfgDefaultLang = 'fr';
Maintenant on doit rendre accessible le
répertoire phpMyAdmin d'une page web, pour cela deux solutions:
·
-
Solution simple :
placer phpMyAdmin dans /usr/local/apache/htdocs et au niveau de la page d'accueil d'apache faire un lien vers /usr/local/apache/htdocs/phpMyAdmin-2.4.0/index.php3
·
Solution
préconisée :
créer un hôte virtuel pointant vers ./phpMyAdmin-2.4.0 qu'on
appelera www.sql.breizland.bz .
Modifiez maintenant la variable $cfgPmaAbsoluteUri
NOTE Si ça vous gène que n'importe qui d'un navigateur puisse aller dans
lerépertore phpMyAdmin, mettez y des restrictions d'accès avec un
fichier .htaccess.
Avec la solution hôte virtuel, à partir d'un
navigateur quand on sélectionne www.sql.breizland.bz on tombe sur une
fenêtre avec frame avec à gauche la liste des bases de données disponibles et à
droite, le menu suivant:
Pour travailler sur une base de données
particulières il suffit de la sélectionner dans le choix déroulant à gauche, on
retrouve d'ailleurs notre base essai, pour en créer une autre il suffit
de choisir Create new database.
Si on sélectionne essai par exemple
et plus particulièrement la table coord, le frame
de droite disparaît pour laisser la place à:
Vous pouvez donc créer des nouvelles tables,
faire des requêtes SQL, etc.
Pour activer les scripts CGI, le fichier httpd.conf est déjà configuré pour, on y trouve notamment la ligne qui
indique où trouver les scripts:
ScriptAlias /cgi-bin/
/usr/local/apache/cgi-bin/
Le but de l'exercice est de créer un script
perl CGI qui va traiter un formulaire quelconque d'une page HTML. Vous
allez créer votre script pérl sous /usr/local/apache/cgi-bin, et
le nommer form.pl, voici son contenu:
#!/usr/bin/perl
use CGI;
$html=new CGI;
print $html->header;
print"<HTML>\n";
print
"<HEAD>\n";
print
"<TITLE>Premier script CGI perl</TITLE>\n";
print
"</HEAD>\n";
print
"<BODY>\n";
print "<H1>Traitement du
formulaire</H1>\n";
print "Nom :";
print $html->param('nom');
print "<p>\n";
print "Email :";
print $html->param('email');
print "<p>\n";
print "Commentaire:";
print
$html->param('comment');
print
"</BODY>\n";
print "</HTML>\n";
Donner les droits qui vont bien avec ce
fichier:
chmod 755 form.pl
En tant qu'utilisateur standard (olivier
dans notre exmple), créer maintenant le fichier HTML suivant que vous appelerez
formulaire.htm
<html>
<body>
<h2>Formulaire</h2>
<form
action="http://obelix/cgi-bin/form.pl" METHOD=GET>
Nom: <input
type="text" name=nom size=20><br>
Email: <input
type="text" name=email size=30><br>
Commentaire:
<input type="text" name=commentsize=100><br>
<input
type=submit value="Envoyer"> <input type=reset
value="remettre à
zéro">
</form>
</body>
</html>
Voilà maintenant quand vous allez accéder à
http://obelix/~olivier/formulaire.htm , vous allez avoir une page du
style:
Haut du formulaire
Nom:
_________
Email:
__________
Commentaire:
Bas du formulaire
En appuyant sur Envoyer ça va
déclencher l'exécution du script CGI péri, qui va provoquer l'affichage
des valeurs précédemment saisies.
Openssl est un serveur SSL permettant de crypter les
informations entre le client et le serveur.
Lieu : http://www.openssl.org/source/ openssl-0.9.7.tar.gz
openssl-0.9.6e.tar.gz
Manuel : http://www.openssl.org/docs/apps/openssl.html
·
L’installation
est très simple
tar xvzf openssl-0.9.7..tar.gz
cd openssl-0.9.7
./config
make
make test
make install
Lieu : ftp://ftp.modssl.org/source/ mod_ssl-2.8.12-1.3.27.tar.gz
Manuel : http://www.modssl.org/docs/
Le mod SSL est en fait un patch pour Apache.
Pour l’appliquer, il suffit d’avoir les sources d’apache et de commencer
l’installation dans le répertoire contenant les sources de mod_ssl
tar xvzf mod_ssl-2.8.12-1.3.27.tar.gz
cd mod_ssl-2.8.12-1.3.27
./configure \
--with-apache/usr/local/src/apache-1.3.27 \
--with-ssl=/usr/local/src/openssl-0.9.7a
--prefix=/usr/local/apache
--enable-module=ssl
--enable-shared=max
cd /usr/local/src/apache-1.3.27
make
make certificate Permet
de générer les différents fichiers servant de clés.
·
Répondre
aux questions
RSA [R] : R
Country Name : FR
Locality Name: Paris
Common name: www.cybergate.local
Email: root@cybergate.local
Certificate validity: 10000
Certificate version [3]: 3
Encrypt the private key now?: Y Encrypter la clé
privée
PEM pass phrase: mettre un mot
de passé pour l’activation
·
Une
fois cette procédure terminée, vous trouverez différents répertoires dans /usr/local/apache/conf
ssl.crl
ssl.crt
ssl.csr
sss.key
ssl.prm
ces
répertoires contiennent les fichiers générés par make certificate
·
make
install
· Ensuit il faut Installater PHP
Modifier dans /htdocs/nom/*.doc ou
phpmyadmin
Rajouter à
la ligne 1133 à 1140 dans httd.conf
Copier
obligatoirement les 6 cl és comportant une étoile
<VirtualHost>
SSLEngine On ***
SSLCipherSuite ***
SSLCertificateFileconf/ssI.crt/webmail. nom.domaine.net.crt ***
SSLCertificateKeyFileconf/ssI.key/webmail.nom.domaine.net.key ***
DocumentRoot /webnew/webmail
ServerName nom.domaine.net
CustomLog /var/log/httpd/maiIJog
common
ErrorLog /var/log/httpd/mail-errorJog
SetEnvIf User-Agent
".*MSIE.*"\ ***
nokeepalive ssl-unclean-shutdown
\
downgrade-1.0 force-response-1.0
<Files ~
"\.(cgi|shtml|phtml|php3?|php|inc)$"> SSLOptions +StdEnvVars
</Files>
<Directory"/usr/local/apache/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
Dans votre
explorateur: https://phpmyadmin.nom_de_domaine:443
SSLEngine on
L'activation
de ssl se fait par l'ordre
SSLCipherSuite
la
localisation des fichiers de certificat,
DocumentRoot -
ServerName - CustomLog – ErrorLog
les ordres
"classiques" des serveurs virtuels
SetEnvIf
,nokeepalive
Des options de configuration automatiquement
par la compilation d'apache dans l'hôte virtuel "par défaut"
· dans /apache/htdocs/privé, créer un
fichier .htaccess
créer un fichier de groupe
· créer fichier d’utilidsateurapachee
différent des utilisateurs systèmes
mkdir /usr/local/apache/auth
/usr/local/apache/bin/.htpasswd
htpasswd
–c /usr/local/apache/auth/.htpasswd user1
vi .htgroupes groupe: user1
user2 user3 …
vi .htaccess
AuthUserFile /usr/local/apache/auth/.htpasswd
AuthGroupFile /usr/local/apache/auth/.htgroupe
AuthName AccesRestreint
AuthType Basic
<limit Get>
order deny,allow
deny from all Interdit
tout le monde
require groupe mon_groupe Autorise
mon groupe
satisfy all Satisfiera
à toutes les requêtes
</limit>
·
Faire
un chmod sur les fichier suivant :
chmod 755 .htaccess
chmod 755 .htpasswd
chmod 755
.htgroupe
phpmyadmin
Si la boite ne s’affiche pas, modifier à la ligne 385 de httpd.conf
allow override none
en
allow
override
La
fiche : Contient une
identification ID,*, Obligatoire,
est incrémenté automatiquement
Nom,Prénom,Adresse,Tel,Email,CP,Ville,Fax
Les fiches
sont contenues dans des tables, qui eux-mêmes contiennent des enregistrement qui eux-mêmes contiennent de champs.
Exemple : Table employés
Champs |
Type |
ID |
INT (ebtier) |
Nom |
Text |
Prénom |
Text |
CP |
Text |
Ville |
Text |
Tel |
Text |
Mail |
Text |
Structure
Query Langage
Manuel : Teach
Yourself in 10 mn SQL 7.50€ environ
·
Sélectionner la table
client
SELECT * FROM Clients ;
·
Sélectionner
les clients qui se prénomment Pierre
SELECT * FROM Clients WHERE clients.prenom #LIKE
‘pierre’;
Toujours spécifier la table avant le champs
·
Et qui
habitent Paris
AND clients.ville LIKE ‘Paris’;
|
|
ID ID
civilite_id civilite 1Mr
nom 2
Mme
prenom 3
Melle
etc… 4
Dr
Exemple : SELECT * FROM clients,civilites
WHERE employés.civilite_id = civilites.ID ;
Clients Marques
ID INT auto* ID INT
Nom
text Nom text
Prenom text
Adresse text Couleurs
Tel text ID
INT
couleur_id INT Couleur text
model_id INT
Models
ID
INT
Noms text
marque_id INT
Requête:
SELECT client.nom,
client.prenom,client.adresse,client.tel,client.model_id
select * FROM clients,couleurs,models,marque WHERE clients.model_id = models_ID
AND models.marque_id = marques.ID AND clients.couleurs_id = couleurs.ID
·
Demande
d’enregistrement du fichier PHP
vérifier le AddType dans httpd.conf
PHP est mal installé
·
Mauvaise
interprétation de PHP
vérifier le AddType
Ce guide, bien qu'il ne soit pas exhaustif, a pour vocation de présenter
comment installer une plate-forme de développement de sites dynamiques sur une
plate-forme Linux. et OpenBSD
avec mode SSL
Si vous
rencontrez une quelconque difficulté ou si vous avez des questions ou des
remarques, n'hésitez pas à poster un message dans le Forum ou a m’envoyer un
message à l’adresse dparize@yahoo.fr.
.
.htaccess............................ 34, 36, 37,
39, 50
.htgroup.................................................. 39
.htpasswd..................................... 34,
36, 38
/
/etc/rc.local.............................................. 18
/usr/local/apache/htdocs.......................... 45
/usr/local/mysql....................................... 14
/var/lib/mysql........................................... 11
/var/named.............................................. 40
A
access.log................................................ 24
AccessFileName...................................... 22
Active Server............................................. 5
AddModule.............................................. 31
AddType.................................................. 23
alias......................................................... 34
Alias........................................................ 23
Apache..................................... 5,
16, 24, 49
apachectl.................................................. 24
apxs................................................... 20,
28
AuthName............................................... 36
B
bibliothèques.............................................. 6
C
CGI..................................................... 16,
26
champs..................................................... 52
chmod..................................................... 20
chown..................................................... 20
clés.......................................................... 49
ColdFusion................................................ 5
config.inc.php......................................... 44
config.inc.php3....................................... 44
cronolog.................................................. 22
CustomLog.............................................. 22
D
directives................................................ 18
Directorylndex......................................... 33
DNS......................................................... 34
DocumentRoot......................................... 32
DSO......................................................... 19
E
enregistrement......................................... 52
error_log................................................. 24
ErrorDocument........................................ 23
ErrorLog............................................ 22,
32
etc/passwd............................................... 11
F
FI 26
Forms Interpréter..................................... 26
Freetype................................................... 7
G
GD....................................................... 8,
30
H
hôte virtuel................................................ 20
hôtes virtuels............................................. 24
html......................................................... 34
HTML........................................................ 5
httd.conf................................................... 49
HTTP......................................................... 5
http.conf.................................................. 29
httpd........................................................ 32
httpd.conf.... 18, 22, 25, 29, 31, 34, 40, 46, 54
I
ID 52
index.html............................................... 22
index.php................................................ 22
inetd........................................................ 19
Internet Information Server........................ 5
intranet................................................... 16
J
Javascript.................................................. 5
JPEG....................................................... 31
L
libexec..................................................... 24
LoadModule.............................................. 31
log........................................................... 32
logfile...................................................... 33
LogFormat............................................... 22
lynx......................................................... 18
M
magie...................................................... 29
make certificate....................................... 49
Microsoft................................................... 5
MIME....................................................... 23
mime.types.............................................. 29
mm........................................................... 7
mod_ssl................................................... 49
mod_vhost_alias.so................................. 24
modules.................................................. 31
MySQL................................................ 5,
11
mysql.server............................................. 15
N
Netscape.................................................... 5
nobody.................................................... 32
O
Open Source........................................... 26
Openssl................................................... 48
P
Perl.......................................................... 26
PHP.................................................. 5,
8, 17
PHP 4........................................................ 7
php.ini..................................................... 29
PHP-Tools................................................ 26
PNG......................................................... 30
PostgreSQL.......................................... 5,
11
proxy....................................................... 33
Proxy....................................................... 24
public_html........................................ 32,
33
R
rc.Iocal.................................................... 15
require..................................................... 36
root......................................................... 32
S
satisfy...................................................... 38
script perl................................................ 46
ServerAdmin........................................... 32
SGBDR.................................................... 11
SQL Server................................................ 5
squid....................................................... 33
SSL......................................................... 49
standalone......................................... 19,
32
strftime.................................................... 22
strip......................................................... 14
Structure
Query Langage........................... 52
T
tables....................................................... 52
True Type................................................. 7
U
UserDir............................................... 32,
33
usr/local/mysql........................................ 11
V
VBScript.................................................... 5
Virtual Hosts............................................ 24
W
Web..................................................... 5,
11
webmaster............................................... 32
www........................................................ 20