Vous avez peut-ĂȘtre dĂ©jĂ vu des adresses web contenant le caractĂšre tilde ~
, par exemple : https://web.media.mit.edu/~mres/
.
Ce type dâadresses est frĂ©quemment utilisĂ© dans les universitĂ©s, et il peut vous simplifier la vie lorsque vous souhaitez tester un site internet localement.
La syntaxe se lit alors comme suit : http[s]://serveur/~utilisateur/
et permet dâavoir un « site web par utilisateur ».
Installation
AprĂšs lâinstallation dâapache :
sudo apt install -y apache2
Vous devrez activer le module userdir
 :
sudo a2enmod userdir
Pour mémoire a2enmod
est une contraction de « Apache2 Enable MODule ».
Ensuite vous devrez redémarrer votre serveur Apache :
sudo systemctl restart apache2.service
Création de votre site web
Le site web de chaque utilisateur se trouve dans un dossier public_html
à la racine du compte, créons ce dossier :
mkdir ~/public_html/
Ensuite, il nous faut un site. Je vous propose de crĂ©er un site basique, ne contenant quâun seul fichier qui doit se nommer index.html
.
cat <<EOF >~/public_html/index.html
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Le site de ${USER}</title>
</head>
<body>
<h2>Super ! Ăa marche !</h2>
</body>
EOF
On peut tester ce site Ă lâaide de :
curl --dump-header - "http://127.0.0.1/~${USER}/"
La commande curl permettant dâobtenir lâentĂȘte (« header ») ainsi que le document lui-mĂȘme dans un mĂȘme rĂ©sultat.
Pour obtenir lâadresse que vous devez utiliser dans votre navigateur, vous pouvez utiliser la commande suivante :
echo "http://127.0.0.1/~${USER}/"
-
RĂ©sultat attendu de la commande curl
HTTP/1.1 200 OK Date: Mon, 22 Jan 2024 06:21:47 GMT Server: Apache/2.4.52 (Ubuntu) Last-Modified: Sun, 21 Jan 2024 11:40:38 GMT ETag: "97-60f732ea94f6d" Accept-Ranges: bytes Content-Length: 151 Vary: Accept-Encoding Content-Type: text/html <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <title>Le site de VOTRE_UTILISATEUR</title> </head> <body> <h2>Super ! Ăa marche !</h2> </body>
Quelques infos utiles concernant Apache2
Ici on part du principe que lâon parle dâun serveur Apache installĂ© avec les paquets Linux standard, car au final tout est configurable, mĂȘme la localisation des fichiers de configuration.
- Le dossier de configuration est :
/etc/apache2/
. - Le fichier de configuration principal est :
/etc/apache2/apache2.conf
, il fait appel Ă plusieurs autres fichiers (il nây a aucune de raison de modifier le fichier principal, partez du principe que les exceptions ne vous concernent pas). - Le dossier contenant les logs est :
/var/log/apache2
. - La configuration des différents sites hébergés se trouve dans le dossier
/etc/apache2/sites-available/
. Ces âsitesâ sont appelĂ©s des hĂŽtes. Il y a, normalement, un fichier de configuration par hĂŽte. - La configuration de lâhĂŽte par dĂ©faut se trouve dans le fichier :
/etc/apache2/sites-available/000-default.conf
- Les hÎtes actifs se trouvent dans le répertoire
/etc/apache2/sites-enabled/
, mais attention, ici on ne met pas des fichiers, mais un lien vers le fichier de configuration correspondant dans/etc/apache2/sites-available/
. Ce lien est géré par les commandes a2ensite (Apache2 ENable SITE) et a2dissite (Apache2 DISable SITE). - On a de maniÚre similaire pour la configuration on a les dossiers
/etc/apache2/conf-available
/etc/apache2/conf-enabled
dâune part, et dâautre part les commandes a2disconf et a2enconf. - Et pour les modules, câest sans surprise
/etc/apache2/mods-available
et/etc/apache2/mods-enabled
avec les commandes a2dismod et a2enmod.
-
Lâarborescence de la configuration dâApache
/etc/apache2/ âââ apache2.conf âââ conf-available â  âââ charset.conf â  âââ gitweb.conf â  âââ javascript-common.conf â  âââ localized-error-pages.conf â  âââ other-vhosts-access-log.conf â  âââ security.conf â  âââ serve-cgi-bin.conf â  âââ w3c-linkchecker.conf â  âââ w3c-markup-validator.conf â ../../w3c/httpd.conf âââ conf-enabled â  âââ charset.conf â ../conf-available/charset.conf â  âââ gitweb.conf â ../conf-available/gitweb.conf â  âââ javascript-common.conf â ../conf-available/javascript-common.conf â  âââ localized-error-pages.conf â ../conf-available/localized-error-pages.conf â  âââ other-vhosts-access-log.conf â ../conf-available/other-vhosts-access-log.conf â  âââ security.conf â ../conf-available/security.conf â  âââ serve-cgi-bin.conf â ../conf-available/serve-cgi-bin.conf â  âââ w3c-linkchecker.conf â ../conf-available/w3c-linkchecker.conf â  âââ w3c-markup-validator.conf â ../conf-available/w3c-markup-validator.conf âââ envvars âââ magic âââ mods-available â  âââ access_compat.load â  âââ ⊠â  âââ xml2enc.load âââ mods-enabled â  âââ access_compat.load â ../mods-available/access_compat.load â  âââ alias.conf â ../mods-available/alias.conf â  âââ alias.load â ../mods-available/alias.load â  âââ ⊠â  âââ userdir.conf â ../mods-available/userdir.conf â  âââ userdir.load â ../mods-available/userdir.load âââ ports.conf âââ sites-available â  âââ 000-default.conf â  âââ default-ssl.conf âââ sites-enabled âââ 000-default.conf â ../sites-available/000-default.conf
En cas de problĂšme
Il est possible de regarder dans le journal systemd les évÚnements du service :
journalctl -xeu apache2.service
Voir mĂȘme regarder lâĂ©tat du service :
systemctl restart apache2.service
On peut regarde dans le fichier dâerreur d'Apache :
cat /var/log/apache2/error.log
Quelques erreurs que vous pouvez rencontrer
Si vous ne pouvez pas accéder au site, par exemple :
curl "http://127.0.0.1/~${USER}/"
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
<hr>
<address>Apache/2.4.52 (Ubuntu) Server at 127.0.0.1 Port 80</address>
</body></html>
curl "http://127.0.0.1/~${USER}/" --head
HTTP/1.1 403 Forbidden
Date: Sun, 21 Jan 2024 12:03:50 GMT
Server: Apache/2.4.52 (Ubuntu)
Content-Type: text/html; charset=iso-8859-1
Ces 2 rĂ©sultats peuvent sâobtenir en une seule commande Ă lâaide de :
curl --dump-header - "http://127.0.0.1/~${USER}/"
Premier cas
Dans les logs vous trouverez alors une erreur du type :
[_DATE_] [authz_core:error] [pid _PID_:tid _TID_] [client 127.0.0.1:_PORT_] AH01630: client denied by server configuration: /mnt/data/home/USER/public_html/
Commençons par regarder quel est le vrai chemin de votre dossier public_html
 :
realpath ~/public_html/
Si le résultat est /home/VOTRE_USER/public_html
, câest ce bien ce qui est attendu.
Si le rĂ©sultat est diffĂ©rent, il faut adapter la configuration. Câest le cas qui engendre lâerreur ci-dessus.
Imaginons que le résultat est /mnt/data/home/USER/public_html
, vous devrez adapter la configuration du module userdir que nous avons activé plus haut.
Par défaut la configuration est la suivante :
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
</Directory>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
On comprend que /mnt/data/home/USER/public_html
ne correspond pas au motif /home/*/public_html
, il faut adapter la configuration Ă lâaide de :
sudo nano /etc/apache2/mods-available/userdir.conf
Vous avez 2 solutions, soit vous modifier la directive Directory
, soit vous ajouter une nouvelle directive. Câest le second choix qui est prĂ©sentĂ© ci-dessous :
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
</Directory>
<Directory /mnt/data/home/*/public_html>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
</Directory>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Second cas
Autre cas, vous la commande curl (ou votre navigateur) vous donne la mĂȘme erreur que plus haut, mais cette fois-ci dans les logs vous avez une erreur du type :
[_DATE_] [core:error] [pid _PID_:tid _TID_] (13)Permission denied: [client 127.0.0.1:_PORT_] AH00132: file permissions deny server access: /home/USER/public_html/index.html
Il est probable quâil sâagisse alors dâun problĂšme de droit sur le rĂ©pertoire public_html
et/ou sur le fichier index.html
.
Le rĂ©pertoire doit ĂȘtre accessible en lecture Ă tout le monde, pour un rĂ©pertoire cela indique quâil doit avoir les bits r
et x
: autrement que ces attributs aient la forme drwxr-xr-x
ou la valeur 755
chmod 755 ~/public_html
En ce qui concerne les fichiers (ici le fichier index.html
), ils doivent ĂȘtre accessibles Ă tous le monde en lecture (-rw-r--r--
soit 644
).
chmod 644 ~/public_html/index.html
Si vous devrez faire cela sur toute une arborescence, vous pouvez utiliser la commande find comme suit :
find ~/public_html/ '(' -type d -printf "D: %p\n" -exec chmod 755 {} \; ')' -or '(' -type f -printf "F: %p\n" -exec chmod 644 {} \; ')'
Liens
Vous pouvez écrire votre premiÚre page web à partir de ces billets :
Si vous nâĂȘtre pas sous Linux :
- Le projet Apache HTTP Server est disponible pour dâautres plateformes.
኿