Dernière modification 19 septembre 2005
NOTE: Pour plus d'info sur Apache www.apache.org
Pour l'analyser des logs d'Apache, reportez vous à la page "Analyser les logs d'Apache avec Webalizer et Awstats".
Pour mettre en place un moteur de recherche, reportez vous à
la page "Ht://Dig".
Pour le PHP un urpmi
apache2-mod_php5 suffit, il mène à l'installation
des packages suivants :
apache2-mod_php5-2.0.53_5.0.3-5mdk.i586
libphp5_common5-5.0.3-8mdk.i586
php5-ctype-5.0.3-4mdk.i586
php5-ftp-5.0.3-4mdk.i586
php5-gettext-5.0.3-4mdk.i586
php5-ini-5.0.3-3mdk.noarch
php5-pcre-5.0.3-4mdk.i586
php5-posix-5.0.3-4mdk.i586
php5-session-5.0.3-4mdk.i586
php5-sysvsem-5.0.3-4mdk.i586
php5-sysvshm-5.0.3-4mdk.i586
php5-yp-5.0.3-4mdk.i586
Vous trouverez ces autres packages pour les extensions GD, MySQL
et LDAP
php5-gd-5.0.3-4mdk.i586.rpm
libmysql14-4.1.11-1.1.102mdk.i586
php5-mysql-5.0.3-6mdk.i586 (requière MySQL)
php5-ldap-5.0.3-6mdk.i586.rpm
(requière OpenLDAP)
ATTENTION - Pour MySQL, le serveur MySQL fourni
avec la Mandrake doit être préalablement installé,
pour plus d'info voir la page MySQL.
- Pour LDAP, le serveur LDAP fourni avec la Mandrake
doit être préalablement installé, pour plus d'info
voir la page OpenLDAP.
Le répertoire de log /var/log/httpd contient
essentiellement deux fichiers:
- access_log listant les accès au serveur
- error_log listant les erreurs en tout genre
Le répertoire de modules /usr/lib/apache2 contient tous les modules utilisables par Apache, pour info un module est une extension logicielle à Apache, lui permettant par exemple d'interpréter le PHP (module mod_php5.so se trouvant sous /usr/lib/apache2-extramodules).
Le répertoire /etc/httpd/conf contient:Dans le fichier commonhttpd.conf vous aurez la configuration notamment de :
### Common server configuration
# nom du proprio du process, l'important est que ce soit pas root
# pour une raison de sécurité
User apache
Group apache
#
# ServerAdmin: Your address, where problems with the server should be
# e-mailed. This address appears on some server-generated
pages, such
# as error documents.
# mail de l'administrateur du serveur
ServerAdmin root@localhost
# on pourra accèder aux pages HTML de vos
utilisateurs si
ceux-ci créent
# un répertoire public_html (droit 755) sous leur
homedirectory (droit 755)
# on y accès en tapant dans un navigateur
http://serveur-apache/~login-utilisateur
<IfModule mod_userdir.c>
UserDir public_html
</IfModule>
(...)
# pour une page multi language le français est
prioritaire
<IfModule mod_negotiation.c>
LanguagePriority fr en de
es it da nl et el ja kr no pl pt pt-br ru ltz ca sv tw
</IfModule>
(...)
# définition des droits d'accès aux pages
perso
<Directory /home/*/public_html>
AllowOverride All
Options MultiViews -Indexes Includes FollowSymLinks
<IfModule mod_access.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
<Directory /home/*/public_html/cgi-bin>
Options +ExecCGI -Includes -Indexes
SetHandler cgi-script
<IfModule mod_access.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
<IfModule mod_perl.c>
<Directory /home/*/public_html/perl>
SetHandler perl-script
<IfDefine !APACHE2>
PerlHandler
Apache::PerlRun
</IfDefine>
<IfDefine APACHE2>
PerlResponseHandler ModPerl::PerlRun
</IfDefine>
Options -Indexes ExecCGI
PerlSendHeader On
<IfModule mod_access.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
</IfModule>
(...)
Vous constaterez que vous pouvez très bien intégrer ce dernier fichier très facilement au fichier httpd2.conf pour simplifier.
A noter le fichier /etc/httpd/conf.d/70_mod_php5.conf contenant
<IfDefine HAVE_PHP5>
Il sert pour l'interprétation des pages se terminant par .php,.php4, etc par le module PHP.
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
Dans ce cas pensez à modifier dans commonhttpd.conf la partie
<Directory /home/*/public_html>
AllowOverride All
Options MultiViews -Indexes Includes FollowSymLinks
<IfModule mod_access.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
<Directory /home/*/public_html/cgi-bin>
Options +ExecCGI -Includes -Indexes
SetHandler cgi-script
<IfModule mod_access.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
<IfModule mod_perl.c>
<Directory /home/*/public_html/perl>
SetHandler perl-script
<IfDefine !APACHE2>
PerlHandler
Apache::PerlRun
</IfDefine>
<IfDefine APACHE2>
PerlResponseHandler ModPerl::PerlRun
</IfDefine>
Options -Indexes ExecCGI
PerlSendHeader On
<IfModule mod_access.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
</IfModule>
Et remplacer /home/*/public_html par /home/httpd/*/html
/etc/rc.d/init.d/httpd start
En cas de modification du fichier de configuration, pour relancer Apache il suffit de taper
/etc/rc.d/init.d/httpd restart
Pour connaître l'état
/etc/rc.d/init.d/httpd status
voilà le résultat
Apache is running.
httpd2: 28556 28555 28554 28553 28552
28544
Use /etc/rc.d/init.d/httpd
extendedstatus for more information.
Pour avoir encore plus d'info
/etc/rc.d/init.d/httpd extendedstatus
voilà le résultat
Apache Server Status for 127.0.0.1
Server Version: Apache-AdvancedExtranetServer/2.0.53
(Mandriva
Linux/PREFORK-9.2.102mdk) PHP/5.0.3
Server Built: Sep 6 2005 09:59:01
_________________________________________________________________
Current Time: Monday, 19-Sep-2005 19:05:54 CEST
Restart Time: Monday, 19-Sep-2005 18:50:04 CEST
Parent Server Generation: 0
Server uptime: 15 minutes 49 seconds
Total accesses: 0 - Total Traffic: 0 kB
CPU Usage: u0 s0 cu0 cs0
0 requests/sec - 0 B/second -
1 requests currently being processed, 4 idle workers
W____...........................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading
Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully
finishing,
"I" Idle cleanup of worker, "." Open slot with no current
process
#######################################
#######################################
Pour stopper
/etc/rc.d/init.d/httpd stop
<html>
<body>
<p> hello world </p>
</body>
</html>
ATTENTION répertoire /home/toto à 755 de même que /home/toto/public_html
Maintenant d'un poste client tapez dans le champ URL de votre navigateur préféré, en admettant que votre serveur se nomme obelix:
http://obelix
Et là magique, apparaît la page d'accueil d'Apache, pour info celle-ci se trouve sous /var/www/html. Maintenant tapez:
http://obelix/~toto
et vous voyez apparaître sur un fond bien gris (ou d'une autre couleur ça dépend de la config de votre navigateur).
hello world
C'est bon ça marche. Pour tester le PHP, en tant que toto, écrivez un fichier info.php sous votre répertoire public_htmlcontenant:
<?
phpinfo();
?>
D'un poste client, tapez dans le champ adresse (ou URL):
http://obelix/~toto/info.php
Voilà le résultat :
C'est bon le module PHP fonctionne.
ATTENTION Si comme moi vous utilisez des URL du style http://www.funix.org/fr/linux/index.php?ref=apache&page=menu c'est à dire avec passage d'arguments, à partir de la version 4.2.0 de php cette fonctionnalité a été désactivée pour des raisons de sécurité. D'autres méthodes permettent néanmoins de pouvoir passer des arguments d'une page à une autre. En attendant pour réactiver cette fonctionnalité, créer le fichier /etc/php/php.ini dans lequel vous mettrez
register_globals = On
Relancez Apache. Cela dit vous avez intérêt à laisser cette variable à Off et procéder comme suit. Voilà le bout de code php des pages html de ce site pour faire l'inclusion du menu à gauche ou pas. Voilà la code avec register_globals = On
<?
if ($page=="menu")
{
$menu="menu.htm";
include($menu);
}
?>
Et le même code avec register_globals = Off
<?
if ($_GET["page"]=="menu")
{
$menu="menu.htm";
include($menu);
}
?>
Dans le fichier /etc/httpd/conf/vhosts/Vhosts.conf on va rajouter:
NameVirtualHost 192.168.13.11
<VirtualHost 192.168.13.11>
ServerName obelix.breizland.bz
DocumentRoot /var/www/html
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-error_log
TransferLog logs/asterix-access_log
</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>
Pour info, ce fichier est appelé dans /etc/http/conf/httpd2.conf à la ligne
Include conf/vhosts/Vhosts.conf
Maintenant dans le fichier commonhttpd.conf rajoutez
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.breizland.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 breizland.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
Rajoutez maintenant au niveau des directives Directory les
lignes suivantes
<Directory /usr/share/doc/HTML>
Options -Indexes
FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Relancez Apache, pour tester l'alias.
AuthUserFile auth/olivier.users
AuthName "Acces Restreint"
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>
Le fichier olivier.users va contenir la liste des utilisateurs habilités à accéder au répertoire où se trouve .htaccess, il va se trouver sous le répertoire /etc/httpd/2.0/auth que vous devez créer préalablement. Pour info vous pouvez changer le chemin /etc/httpd/2.0 en modifiant la valeur de la variable ServerRoot qu'on trouve dans le fichier httpd2.conf. Pour créer ce fichier il suffit de taper:
htpasswd -c /etc/httpd/2.0/auth/olivier.users olivier
L'option -c correspond à la création du fichier. On va alors avoir à rentrer un mot de passe pour l'utilisateur olivier habilité à accéder au répertoire protégé.
New password:
On confirme
Re-type new password:Pour que l'utilisateur veronique puisse accéder aussi au répertoire reserve d'olivier, vous taperez alors :
htpasswd /etc/httpd/2.0/auth/olivier.users veronique
Maitenant quand à partir de votre navigateur préféré quand vous allez rentrer comme URL http://obelix/~olivier/reserve, vous aurez une fenêtre popup qui va s'ouvrir vous demandant de rentrer votre nom d'utilisateur et le mot de passe préalablement rentré.
A noter qu'il existe une directive qui permet de ne pas voir les fichiers .htaccess de vos utilisateurs à partir d'un navigateur, elle est dans le fichier commonhttpd.conf :
<files ~ "/\.ht">
order deny,allow
deny from all
</files>
<?
$serveur="localhost";
$login="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 $table VALUES('$nom','$prenom','$email')";
$result=mysql_query($query,$id);
echo "Saisie terminée";
?>
Placer ce script dans ~/public_html et appeler le bd1.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 the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10 to server version: 4.1.11
Type 'help' for help.
mysql> SELECT * FROM coord;
+-----+-------+--------------------+
| nom | prenom |
email
|
+-----+-------+--------------------+
| 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");
$expl=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);
echo "$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 the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10 to server version: 4.1.11
Type 'help' for help.
mysql> SELECT * FROM ref;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.
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
Cet alias permet d'accèder au répertoire des scripts CGI. Vous devez avoir aussi le package perl-CGI installé sur votre système.
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 en tant que root votre script perl sous /var/www/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
L'utilisateur apache du groupe apache doit en être propriétaire:
chown apache:apache form.pl
En tant qu'utilisateur standard (olivier dans notre exemple), dans votre répertoire public_html 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=comment size=30><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:
En appuyant sur Envoyer ça va déclencher l'exécution du script CGI perl, qui va provoquer l'affichage des valeurs précédemment saisies.
<?
// nom du serveur LDAP
$server="asterix";
// identification de l'administrateur de la base
$rootdn="cn=Manager, dc=breizland, dc=bz";
//mot de passe administrateur
$rootpw="secret";
//connexion à la base
$result=ldap_connect($server);
if ($result==1)
{
ldap_bind($result,$rootdn,$rootpw);
}
//Enregistrement d'une entrée dans la base
echo"Enregistrement de Benjamin Hoarau\n";
$dn="dc=breizland, dc=bz";
$nom="Hoarau";
$prenom="Benjamin";
$info["cn"]=$nom." ".$prenom;
$info["sn"]=$nom;
$info["objectclass"]="person";
ldap_add($result,"cn=$nom $prenom,$dn",$info);
ldap_close($result);
echo "L'enregistement a réussi";
?>
Appelez ce fichier ldap.php, vous pouvez le tester et
vérifier avec ldapsearch que l'entrée a bien
été saisie dans la base.
[Retour page d'accueil FUNIX] |