À la demande de lami20j je me permets d'intervenir dans la discussion pour essayer de dépanner. J'ai pas trop suivi était quel était le problème mais bon, on va repartir sur des bases saines
Étape 1 : faire le ménage
Pour repartir sur un truc sain, on va partir sur une installation propre et vierge d'apache. Si tu as des remords, sauve /etc/apache2 quelque part.
Puis lance les deux commandes :
cp -r /etc/apache2 ~/ancienne_conf_apache2
dpkg -l | egrep "(apache2|libapache2)" | cut -d" " -f3 | xargs sudo dpkg --purge
Étape 2 : installation
Maintenant réinstallons proprement apache2. On a le choix entre deux moteurs (mpm) mais sauf besoin spécifique, on devrait travailler avec le worker. :
sudo aptitude update
sudo aptitude safe-upgrade
sudo aptitude install apache2 apache2-mpm-worker
Étape 3 : lancer, stopper, redémarrer apache
À ce stade apache2 est installé et a priori il est même lancé automatiquement par ubuntu par le biais du script /etc/init.d/apache2 (en fait tout serveur réseau digne de ce nom est une tâche qui tourne en arrière plan (démon) et se lance par le biais d'un script shell contenu dans /etc/init.d). Les scripts contenus dans ce répertoire (les services), prennent tous en paramètres des directives bien précises, typiquement stop, start, restart etc...
Ainsi on pourrait lancer des commandes comme :
sudo /etc/init.d/apache2 stop
sudo /etc/init.d/apache2 start
sudo /etc/init.d/apache2 restart
... mais de nos jours on passe plutôt par l'instruction service :
sudo service apache2 stop
sudo service apache2 start
sudo service apache2 restart
Bref, maintenant on sait lancer, stopper ou redémarrer apache2 proprement. À présent, allons le configurer. Comme tout point de configuration global au système (comprendre, pas spécifique à un utilisateur), ça se passe dans /etc. Et comme apache2 contient pas mal de configuration, histoire de ne pas trop semer la zone dans /etc, tout est rassemblé dans /etc/apache2.
Étape 4 : configurer apache
Il y a quelques fichiers plus ou moins intéressants :
- /etc/apache2/ports.conf : port(s) sur lequel(s) écoute apache2 (80 pour http, 443 pour https), a priori on n'y touche pas
- /etc/apache2/httpd.conf : fichier où il ne se passe pas grand chose, essentiellement là pour des raisons historiques
- /etc/apache2/apache2.conf : le "remplaçant" de httpd.conf où il se passe pas mal de chose.
- et quelques autres, dont envvars et qu'on a pas spécialement de raison de modifier.
Ensuite on voit un certains nombre de répertoires, en particulier :
-
/etc/apache2/mods-available/ :
Les modules apache2 installés, mais pas forcément configurés. Ce répertoire sera alimenté en installant les paquets "libapache2-mod-..." comme par exemple libapache2-mod-php5 le jour où on voudra faire du php5.
-
/etc/apache2/mods-enabled/ :
Les modules apache2 activés (ne devrait contenir que des liens symboliques vers mods-available)
-
/etc/apache2/sites-available/ :
Ce répertoire contient des fichiers qui configure chaque site hébergé par apache2. En particulier, l'arborescence fournit par le serveur apache peut provenir de différents endroits. Par exemple le site "default" est configuré de sorte à mettre à disposition ce qui est dans /var/www.
Si on installait munin (qui permet de fournir une interface web qui graphe certains aspects du système comme la charge réseau, la charge CPU etc...), on aurait probablement un fichier qui apparaîtrait la dedans et qui dirait ou chercher le "site" munin, stocké à un autre endroit de l'arborescence.
-
/etc/apache2/sites-enabled/ :
Les sites apache2 activés (ne devrait contenir que des liens symboliques vers sites-available)
En fait, une partie de la configuration apache2 découle des liens symbolique établis de mods-enabled vers mods-available (on construit un lien par module à charger) et même principe avec les sites. C'est un mécanisme qu'on retrouverait pour d'autres serveurs (par exemple munin dont j'ai déjà parlé) ou qu'on retrouve dans la chaîne de lancement de linux (cf /etc/rc0.d à /etc/rc6.d qui pointent sur les services stockés dans /etc/init.d et qui décrivent les services à lancer ou stopper en fonction du runlevel auquel on a démarré linux).
Bref, on pourrait construire ces liens symboliques avec la commande ln (ou les supprimer avec la commande rm), mais bien souvent, on va plutôt s'appuyer sur une commande. Par exemple la chaîne de lancement de linux se configure sous debian avec la commande update-rc.d. Apache2 fonctionne de même et on construit/supprime ces liens symboliques avec les commandes :
- a2enmod (apache2, enable module ie activer un module)
- a2dismod (apache2, disable module ie désactiver un module)
- a2ensite (apache2, enable site ie activer un site)
- a2dissite (apache2, disable site ie désactiver un site)
Étape 5 : un peu de html
Bon tout ça c'est cool, mais notre site ? A priori,lesite "default" (voir /etc/apache2/sites-available et sites-enabled) et si on regarde la configuration pointée par ce lien, on voit que celui-ci est dans /var/www.
ls -l /etc/apache2/sites-enabled/000-default
cat /etc/apache2/sites-available/default
Ok, donc on voit que le DocumentRoot est /var/www. Ceci signifie que l'arborescence visible quand je me connecte au site démarre à partir de /var/www. C'est donc là que je dois mettre mes pages. Cependant il faut que l'utilisateur www-data ait les droits en lectures sur ces fichiers sinon apache2 va se prendre un permission denied en voulant lire ce fichier.
Bon on va créer ce fichier par exemple avec nano :
sudo nano /var/www/index.html
Avec nano on écrit un peu de code html :
<html>
<body>
<h1> Test ! </h1>
</body>
</html>
(ctrl x pour sauver et quitter)
Si les caractères accentués posent problème on peut forcer l'encodage. Typiquement ton système utilise probablement de l'UTF8 et apache risque de partir du principe que tu en utilises un autre. Pour forcer le "charset" il faut intervenir dans deux fichier :
sudo nano /etc/apache2/conf.d/charset
Et là on corrige ce fichier de sorte à avoir (en enlevant le # devant la ligne en gras) :
# Read the documentation before enabling AddDefaultCharset.
# In general, it is only a good idea if you know that all your files
# have this encoding. It will override any encoding given in the files
# in meta http-equiv or xml encoding tags.
AddDefaultCharset UTF-8
On va également corriger envvars :
sudo nano /etc/apache2/envvars
... en décommentant la ligne en gras :
# envvars - default environment variables for apache2ctl
# this won't be correct after changing uid
unset HOME
# for supporting multiple apache2 instances
if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}"
else
SUFFIX=
fi
# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2$SUFFIX.pid
export APACHE_RUN_DIR=/var/run/apache2$SUFFIX
export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX
# Only /var/log/apache2 is handled by /etc/logrotate.d/apache2.
export APACHE_LOG_DIR=/var/log/apache2$SUFFIX
## The locale used by some modules like mod_dav
export LANG=C
## Uncomment the following line to use the system default locale instead:
. /etc/default/locale
export LANG
## The command to get the status for 'apache2ctl status'.
## Some packages providing 'www-browser' need '--dump' instead of '-dump'.
#export APACHE_LYNX='www-browser -dump'
Bon comme d'habitude, pour que ce soit pris en compte il faudra penser à relancer apache2 :
sudo service apache2 restart
Désormais on devrait pouvoir taper des caractères accentués dans nos fichiers html ou php sans avoir à se préoccuper des séquences "é" pour écrire un é ou sans avoir à passer le charset dans l'en-tête du fichier.
Étape 6 : corriger les droits
De bons "droits" seraient propriétaire root (ou le login que tu utilises pour développer) (droits rw), groupe propriétaire www-data (droits r) et c'est tout :
sudo chown root:www-data index.html
sudo chmod 640 index.html
Ainsi :
ls -al /var/www
... renverrait :
total 12
drwxr-xr-x 2 root root 4096 20 oct. 19:39 .
drwxr-xr-x 15 root root 4096 14 oct. 14:26 ..
-rw-r----- 1 root www-data 52 20 oct. 19:39 index.html
Étape 7 : tester apache
Bon, voyons si tout ceci marche. Avec mon navigateur je me connecte sur ce serveur apache2. Si c'est ma propre machine je peux aller sur :
http://127.0.0.1/index.html
http://localhost/index.html
(si c'est une autre machine, il suffit de mettre son IP ou son hostname).
Étape 8 : installer des modules apache
Installons par exemple le module php5
sudo aptitude install libapache2-mod-php5
Là on s'apercevra que php5 cassera le mpm et voudra installer le prefork (moins performant) à la place du worker. C'est triste, mais si on a besoin de php5, il semble qu'on doive se contenter d'un moteur moins performant... Bref, on dit a aptitude qu'on accepte de dégager le mpm-worker et on le laisse mettre le mpm-prefork
À ce stade tu peux vérifier que php5 est apparu dans /etc/apache2/mod-available, mais que le lien symbolique n'a pas encore été forcément créé dans /etc/apache2/mod-enabled :
ls -l /etc/apache2/mods-available/php5
ls -l /etc/apache2/mods-enabled/php5
Activons-le si ce lien n'est pas encore construit :
sudo a2enmod php5
Maintenant, il faut garder à l'esprit que corriger ces liens symboliques ou les fichiers de configuration d'apache2 n'est pris en compte qu'au lancement d'apache2. En fait de manière général, quand on modifie un fichier de configuration lié à une application, il faut relancer l'application pour que ce soit pris en compte. Ça tombe bien, maintenant on sait faire :
sudo service apache2 restart
Le principe serait le même pour n'importe quel module (par exemple le module status si on veut faire du munin) :
- installation du module (aptitude install libapache2-mod-....)
- activation du module (a2enmod lemoduleaactiver)
- relancer apache2
Pour voir les modules mis à disposition par le gestionnaire de paquets :
apt-cache search libapache2-mod | grep libapache2-mod
Bon maintenant on va essayer avec un peu de php :
sudo mv /var/www/index.html /var/www/index.php
sudo nano /var/www/index.php
Note : il est important que l'extension soit .php (ou .php5) pour qu'apache envisage d'interpréter le php.
Corrigeons le de sorte à avoir :
<html>
<body>
<h1> Test ! </h1>
<?php
echo "La date du jour est " . date("d/m/Y") . " !\n";
?>
</body>
</html>
On teste :
http://localhost/index.php
Étape 9 : le cas particulier de php5 : la page ne s'affiche pas !
Si au lieu de voir la page s'afficher, ton navigateur te propose de télécharger index.php, fais ce qui est indiqué ici, rubrique langage de script :
http://doc.ubuntu-fr.org/apache2
... à savoir corrige /etc/apache2/httpd.conf (soit avec sudo nano, soit avec gksudo gedit pour être plus à l'aise) :
gksudo gedit /etc/apache2/httpd.conf &
... et mets dedans :
<IfModule mod_mime.c>
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php5
AddLanguage ca .ca
AddLanguage cs .cz .cs
AddLanguage da .dk
AddLanguage de .de
AddLanguage el .el
AddLanguage en .en
AddLanguage eo .eo
AddLanguage es .es
AddLanguage et .et
AddLanguage fr .fr
AddLanguage he .he
AddLanguage hr .hr
AddLanguage it .it
AddLanguage ja .ja
AddLanguage ko .ko
AddLanguage ltz .ltz
AddLanguage nl .nl
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddLanguage pt .pt
AddLanguage pt-BR .pt-br
AddLanguage ru .ru
AddLanguage sv .sv
AddLanguage zh-CN .zh-cn
AddLanguage zh-TW .zh-tw
</IfModule>
Note : on aurait pu ajouter ceci à la fin de /etc/apache2/apache2.conf.
Bon ben on a modifié la configuration.... Donc rebelote :
sudo service apache2 restart
Et on resteste (avec le bouton rafraîchir par exemple) :
http://localhost/index.php
Pour plus d'informations :
http://doc.ubuntu-fr.org/apache2
Et voilà ;-)
je pense que ce sera sans hésiter ma référence le jour ou je voudrai créer un site web.
Alors t'attends quoi pour mettre un + ?!! ;-DDD
:-)