HTTPD - serveur Web Apache2

Apache est le serveur web le plus couramment utilisé sur les systèmes Linux. Les serveurs web sont utilisés pour servir des pages web demandées par les ordinateurs clients. Ces clients demandent et affichent généralement des pages web en utilisant des navigateurs tels que Firefox, Opera, Chromium ou Mozilla.

Les utilisateurs saisissent une URL (adresse internet) pour pointer vers un serveur Web au moyen de son nom de domaine complet (FQDN) et un chemin d'accès à la ressource requise. Par exemple, pour afficher la page d'accueil du site Web Ubuntu un utilisateur entrera seulement le nom de domaine complet :

www.ubuntu.com

Pour voir la sous-page sur la communauté, un utilisateur entrera le nom complet suivi d'un chemin :

www.ubuntu.com/community

La méthode la plus communément utilisée pour le transfert de pages Web est le protocole de transfert hypertexte (dont l'acronyme anglais est HTTP). Le protocole de transfert hypertexte sur sockets sécurisées (HTTPS) et le protocole de transfert de fichiers (FTP), qui permet d'envoyer et de télécharger des fichiers, sont également pris en charge.

Les serveurs Web Apache sont fréquemment utilisés en combinaison avec le moteur de base de données MySQL, le langage de script de pré-traitement hypertexte (PHP), et d'autres langages de scripts prisés tels que Python et Perl. Cette configuration, connue sous le nom de LAMP (Linux, Apache, MySQL et Perl/Python/PHP), constitue une puissante et robuste plate-forme de développement et de déploiement d'applications Web.

Installation

Le serveur web Apache2 est disponible dans Ubuntu Linux. Pour installer Apache2 :

  • Saisissez la commande suivante dans un terminal :

    sudo apt-get install apache2
    

Configuration

Apache2 doit être configuré à l'aide de directives décrites dans des fichiers texte de configuration. Ces directives sont réparties entre les fichiers et dossiers suivants :

  • Le fichier de configuration principal est apache2.conf. Il contient les paramètres globaux d'Apache2.

  • httpd.conf: historiquement le principal fichier de configuration Apache2, nommé d'après le démon httpd. Maintenant, le fichier n'existe plus. Dans les anciennes versions d'Ubuntu, le fichier peut être présent mais vide, toutes les options de configurations ayant été déplacées dans le répertoire référencé ci-dessous.

  • conf-available : ce répertoire contient les fichiers de configuration disponibles. Tous les fichiers qui étaient auparavant dans /etc/apache2/conf.d peuvent être déplacés dans /etc/apache2/conf-available.

  • conf-enabled : conserve les liens symboliques dans /etc/apache2/conf-available. Quand un fichier de configuration est pointé, il sera activé au prochain démarrage de apache2.

  • envvars : fichier où les variables d'environnement d'Apache2 sont définies.

  • mods-available : ce répertoire contient les fichiers de configuration qui permettent de charger les modules et de les paramétrer. Certains modules peuvent ne pas avoir de fichier de configuration.

  • mods-enabled : contient les liens symboliques (symlinks) vers les fichiers de /etc/apache2/mods-available. Lorsqu'un lien symbolique vers un module de configuration est créé, il sera activé au prochain redémarrage d'Apache2.

  • ports.conf : héberge les directives déterminant les ports TCP sur lesquels Apache2 est en écoute.

  • sites-available : ce dossier contient des fichiers de configuration pour les serveurs virtuels d'Apache2. Les serveurs virtuels permettent de configurer Apache2 pour plusieurs sites ayant différentes configurations.

  • sites-enabled : comme mods-enabled, sites-enabled contient des liens symboliques vers le dossier /etc/apache2/sites-available. De la même manière que lorsqu'un lien symbolique vers un fichier de configuration de sites-available est créé, le site ainsi configuré sera activé au prochain redémarrage d'Apache2.

  • magic : instructions pour déterminer le type MIME à partir des premiers bytes d'un fichier.

Enfin, d'autres paramétrages peuvent être ajoutés en utilisant la directive Include et des caractères jokers peuvent être utilisés pour inclure de multiples fichiers de configuration. Ces directives peuvent être placées dans n'importe lequel de ces fichiers de configuration. Les changements effectués dans les fichiers de configuration principaux ne sont pris en compte qu'au (re-)démarrage d'Apache2.

Le serveur lit également un fichier contenant les documents de type MIME, le nom du fichier est défini par la commande TypesConfig, généralement par l’intermédiaire de /etc/apache2/mods-available/mime.conf, qui peut également inclure des ajouts ou des remplacements, et est /etc/mime.types par défaut.

Réglages de base

This section explains Apache2 server essential configuration parameters. Refer to the Apache2 Documentation for more details.

  • Apache2 ships with a virtual-host-friendly default configuration. That is, it is configured with a single default virtual host (using the VirtualHost directive) which can modified or used as-is if you have a single site, or used as a template for additional virtual hosts if you have multiple sites. If left alone, the default virtual host will serve as your default site, or the site users will see if the URL they enter does not match the ServerName directive of any of your custom sites. To modify the default virtual host, edit the file /etc/apache2/sites-available/000-default.conf.

    Le jeu de directives pour un hôte virtuel ne s'applique qu'à cet hôte virtuel en particulier. Si une directive est définie globalement pour le serveur et n'est pas définie dans les paramètres de l'hôte virtuel, les paramètres par défaut s'appliquent. Par exemple, vous pouvez définir l'adresse électronique du webmaster globalement, et ne pas définir d'adresses individuelles pour chaque hôte virtuel.

    Si vous souhaitez configurer un nouvel hôte virtuel ou site, copiez ce fichier dans le même répertoire avec un nom de votre choix. Par exemple :

    sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/mynewsite.conf
    

    Modifiez le nouveau fichier pour configurer le nouveau site en utilisant certaines des commandes décrites ci-dessous.

  • La directive ServerAdmin spécifie l'adresse électronique qui figurera comme adresse de l'administrateur du serveur. La valeur par défaut est webmaster@localhost. Cette valeur devrait être remplacée par une adresse dont vous êtes destinataire (dans le cas où vous êtes l'administrateur du serveur). Si votre site rencontre un problème, Apache2 affichera un message d'erreur contenant cette adresse mail afin de signaler le problème. Cette directive est à placer dans les fichiers de configuration de vos sites situés dans /etc/apache2/sites-available.

  • La directive Listen précise le port, et de manière optionnelle l'adresse IP, sur lesquels Apache2 écoute. Si l'adresse IP n'est pas spécifiée, Apache écoutera sur toutes les adresses IP assignées à la machine. La valeur par défaut de la directive Listen est 80. Modifiez la en 127.0.0.1:80 afin qu'Apache2 n'écoute que sur l'interface locale et ne soit pas accessible depuis l'Internet, en 81 (par exemple) afin de modifier le port sur lequel Apache2 écoute, ou laissez la valeur par défaut dans la majorité des cas. Cette directive se situe dans le fichier /etc/apache2/ports.conf

  • The ServerName directive is optional and specifies what FQDN your site should answer to. The default virtual host has no ServerName directive specified, so it will respond to all requests that do not match a ServerName directive in another virtual host. If you have just acquired the domain name ubunturocks.com and wish to host it on your Ubuntu server, the value of the ServerName directive in your virtual host configuration file should be ubunturocks.com. Add this directive to the new virtual host file you created earlier (/etc/apache2/sites-available/mynewsite.conf).

    Comme beaucoup de visiteurs pensent que le préfixe www est utile, il est souhaitable que vous configuriez votre hôte virtuel pour qu'il réponde à ce nom. Utilisez la directive ServerAlias. Il est possible d'utiliser des caractères jokers dans la directive ServerAlias.

    Par exemple, votre site répondra à n'importe quelle requête de domaine finissant par .ubunturocks.com en utilisant la configuration suivante :

    ServerAlias *.ubunturocks.com
    
  • The DocumentRoot directive specifies where Apache2 should look for the files that make up the site. The default value is /var/www/html, as specified in /etc/apache2/sites-available/000-default.conf. If desired, change this value in your site's virtual host file, and remember to create that directory if necessary!

Activer le nouveau VirtualHost grâce à l'utilitaire a2ensite puis redémarrez Apache2 :

sudo a2ensite mon_nouveau_site
sudo service apache2 restart

Il est préférable d'utiliser un nom plus explicite que mon_nouveau_site. Par exemple nommez le fichier en utilisant la valeur de la directive ServerName de l'hôte virtuel.

De manière analogue l'utilitaire a2dissite permet de désactiver les sites. Cela peut être utile lors du dépannage de problèmes de configuration avec plusieurs hôtes virtuels :

sudo a2dissite mon_nouveau_site
sudo service apache2 restart

Réglages par défaut

Cette section explique la configuration par défaut du serveur Apache2. Par exemple, si vous ajoutez un hôte virtuel, les paramètres que vous définissez pour celui-ci deviennent prioritaires. Pour une directive qui n'est pas définie à l'intérieur de l'hôte virtuel, la valeur par défaut est utilisée.

  • La directive DirectoryIndex stipule la page par défaut qui doit être servie lorsqu'un utilisateur demande l'index d'un répertoire en spécifiant une barre oblique (/) à la fin du nom d'un répertoire.

    Par exemple, lorsqu'un utilisateur demande la page http://www.exemple.com/ce_repertoire/, il obtiendra soit la page DirectoryIndex si elle existe, soit un listing du répertoire généré par le serveur si Option Indexes est spécifiée, soit encore une page « Autorisation refusée » si aucune de ces deux conditions n'est remplie. Le serveur essaiera de trouver un fichier parmi ceux listés dans la directive DirectoryIndex et renverra le premier d'entre eux. S'il ne trouve aucun des fichiers stipulés et si Options Indexes est configurée pour ce répertoire, le serveur en renverra alors la liste des sous-répertoires et fichiers, au format HTML. La valeur par défaut, spécifiée dans /etc/apache2/mods-available/dir.conf, est « index.html index.cgi index.pl index.php index.xhtml index.htm ». Ainsi, si Apache2 trouve un fichier portant l'un de ces noms, il l'affichera.

  • La commande ErrorDocument permet de spécifier un fichier à utiliser par Apache2 pour les événements d'erreur spécifiques. Par exemple, si un utilisateur demande une ressource qui n'existe pas, une erreur 404 se produit. Par défaut, Apache2 retournera simplement un code HTTP 404. Lire /etc/apache2/conf.d/localized-error-pages pour obtenir des instructions détaillées sur l'utilisation de ErrorDocument, y compris l'emplacement des fichiers d'exemple.

  • Par défaut, le serveur écrit le journal de transferts dans le fichier /var/log/apache2/access.log. Vous pouvez le changer sur la base de chaque site dans vos fichiers de configuration d'hôte virtuel avec la commande CustomLog, ou l'ignorer et accepter la valeur par défaut, spécifiée dans /etc/apache2/conf.d/other-vhosts-access-log. Vous pouvez également spécifier le fichier dans lequel les erreurs sont enregistrées, avec la commande ErrorLog, le fichier par défaut est /var/log/apache2/error.log. Ceux-ci sont conservés séparément du journal de transfert afin d'aider à la résolution des problèmes avec votre serveur Apache2. Vous pouvez également spécifier le LogLevel (la valeur par défaut est « avertissement ») et le LogFormat (voir /etc/apache2/apache2.conf pour la valeur par défaut).

  • Certaines options sont définies par répertoire plutôt que par serveur. Options est l'une de ces directives. Une déclaration Directory est entourée d'étiquettes de type XML :

    <Directory /var/www/html/mynewsite>
    ...
    </Directory>
    

    La directive Options à l'intérieur d'une déclaration Directory peut avoir avoir une ou plusieurs valeurs séparées par des espaces :

    • ExecCGI - Autorise l'exécution des scripts CGI. Les scripts CGI ne sont pas exécutés si cette option n'est pas choisie.

      La plupart des fichiers ne devraient pas être exécutés comme des scripts CGI. Ce serait très dangereux. Les scripts CGI doivent être dans un répertoire distinct et en dehors de votre dossier racine de serveur, et seul ce répertoire aura l'option ExecCGI active. Le répertoire par défaut où se trouvent les scripts CGI est /usr/lib/cgi-bin.

    • Includes - Autorise les inclusions côté serveur. Les inclusions côté serveur permettent à un fichier HTML d' inclure d'autres fichiers. Voir Apache SSI documentation (Ubuntu community) pour plus d'informations.

    • IncludesNOEXEC - Autorise les inclusions côté serveur, mais désactive les commandes #exec et #include dans les scripts CGI.

    • Indexes - affiche une liste des fichiers et dossiers du répertoire s'il n'existe aucun « DirectoryIndex » (tel que index.html) dans le répertoire demandé.

      Pour des raisons de sécurité, ceci ne devrait habituellement pas être activé, et cela ne devrait certainement pas être activé dans votre répertoire racine de documents (DocumentRoot). Si vous êtes certain de vouloir que les utilisateurs voient le contenu complet d'un répertoire, activez cette option avec prudence dans une section pour ce répertoire.

    • Multiview - Support content-negotiated multiviews; this option is disabled by default for security reasons. See the Apache2 documentation on this option.

    • SymLinksIfOwnerMatch - Ne suit les liens symboliques que si le fichier ou répertoire cible a le même propriétaire que le lien.

Paramètres httpd

Cette section explique certains paramétrages basiques du démon httpd.

LockFile - La directive LockFile définit le chemin vers le fichier lockfile utilisé lorsque le serveur est compilé soit avec USE_FCNTL_SERIALIZED_ACCEPT, soit USE_FLOCK_SERIALIZED_ACCEPT. Ce fichier doit être enregistré sur le disque local. On doit laisser la valeur par défaut à moins que le répertoire des journaux se situe sur un partage NFS. Dans ce cas, la valeur par défaut doit être modifiée pour un emplacement, sur le disque local, lisible uniquement par le super-utilisateur (root).

PidFile - La directive PidFile définit le fichier dans lequel le serveur enregistre son ID de processus (pid : process ID). Ce fichier ne doit être accessible en lecture que par le super-utilisateur (root). Dans la plupart des cas, la valeur par défaut peut être conservée.

User - La commande User définit l'identité de l'utilisateur utilisée par le serveur pour répondre aux demandes. Ce paramètre détermine l'accès au serveur. Tous les fichiers inaccessibles à cet utilisateur seront également inaccessibles aux visiteurs de votre site web. La valeur par défaut pour l'utilisateur est "www-data".

À moins que vous ne sachiez exactement ce que vous faites, ne définissez jamais la directive User à root. Utiliser root (super-utilisateur) comme valeur pour User créera des failles de sécurité béantes dans votre serveur Web.

Group - La commande Group est similaire à la commande User. Group définit le groupe sous lequel le serveur répond aux requêtes. Le groupe par défaut est également "www-data".

Modules Apache2

Apache2 est un serveur modulaire. Cela signifie que seules les fonctionnalités les plus basiques sont incluses dans le cœur même du serveur. Les fonctionnalités étendues sont disponibles grâce aux modules qui peuvent être chargés dans Apache2. Par défaut, un ensemble de modules de base est inclus dans le serveur au moment de la compilation. Si le serveur est compilé pour utiliser les modules chargés dynamiquement, alors ces derniers peuvent être compilés séparément et ajouté à tout moment en utilisant la directive LoadModule. Sinon, Apache2 doit être recompilé pour ajouter ou supprimer des modules.

Ubuntu compile Apache2 pour permettre le chargement dynamique de modules. Les directives de configuration peuvent être incluses dans un module particulier en les délimitant par un bloc <IfModule>.

Vous pouvez installer des modules additionnels d'Apache2 et les utiliser avec votre serveur Web. Par exemple, exécutez la commande suivante dans un terminal pour installer le module Authentification MySQL :

sudo apt-get install libapache2-mod-auth-mysql

Consultez le répertoire /etc/apache2/mods-available pour voir les modules supplémentaires.

L'utilitaire a2enmod permet d'activer un module :

sudo a2enmod auth_mysql
sudo service apache2 restart

Inversement, a2dismod désactivera un module :

sudo a2dismod auth_mysql
sudo service apache2 restart

Configuration HTTPS

Le module mod_ssl ajoute d'importantes caractéristiques au serveur Apache2 - la capacité de chiffrer les communications. De plus, lorsque votre navigateur Web communique en utilisant SSL, le préfixe https:// est utilisé au début de l'adresse Web (URL) dans la barre d'adresse du navigateur.

Le module mod_ssl est disponible dans le paquet apache2-common. Saisissez la ligne de commande suivante pour activer le module mod_ssl :

sudo a2enmod ssl

There is a default HTTPS configuration file in /etc/apache2/sites-available/default-ssl.conf. In order for Apache2 to provide HTTPS, a certificate and key file are also needed. The default HTTPS configuration will use a certificate and key generated by the ssl-cert package. They are good for testing, but the auto-generated certificate and key should be replaced by a certificate specific to the site or server. For information on generating a key and obtaining a certificate see Certificats

Pour configurer Apache2 pour HTTPS, saisissez les informations suivantes :

sudo a2ensite default-ssl

Les répertoires par défaut sont /etc/ssl/certs et /etc/ssl/private. Si vous installez le certificat et la clé dans un autre répertoire, assurez-vous de modifier SSLCertificateFile et SSLCertificateKeyFile en conséquence.

Avec Apache2 maintenant configuré pour HTTPS, redémarrez le service pour activer les nouveaux paramètres :

sudo service apache2 restart

Selon comment vous avez obtenu votre certificat, vous devrez entrer un mot de passe lors du redémarrage d'Apache2.

Vous pouvez accéder aux pages du serveur sécurisé en tapant https://votre_nomdhote/url/ dans la barre d'adresse de votre navigateur.

Permission d'écriture sur le partage

For more than one user to be able to write to the same directory it will be necessary to grant write permission to a group they share in common. The following example grants shared write permission to /var/www/html to the group "webmasters".

sudo chgrp -R webmasters /var/www/html
sudo find /var/www/html -type d -exec chmod g=rwxs "{}" \;
sudo find /var/www/html -type f -exec chmod g=rws  "{}" \;

Si l'accès doit être accordé à plus d'un groupe par répertoire, activez Access Control Lists (ACL).

Références

  • Apache2 Documentation contains in depth information on Apache2 configuration directives. Also, see the apache2-doc package for the official Apache2 docs.

  • Consultez le site Mod SSL Documentation (en anglais) pour plus d'informations concernant SSL.

  • O'Reilly's Apache Cookbook (en anglais) est une bonne ressource pour réaliser des configurations spécifiques d'Apache2.

  • Pour les questions concernant Apache2 mais spécifiques à Ubuntu, consultez le #ubuntu-server canal anglophone IRC sur freenode.net, ou le canal généraliste francophone #ubuntu-fr.

  • Apache étant habituellement couplé avec PHP et MySQL, la page du Wiki Ubuntu consacrée à Apache MySQL PHP est également une très bonne source d'information.