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 remettre des pages Web demandées par des ordinateurs clients. Les clients demandent et affichent habituellement des pages Web en utilisant des applications de navigation Web telles que Firefox, Opera, Chromium, ou Internet Explorer.

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 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 :

  • apache2.conf : le fichier principal de configuration d'Apache2. Il contient des paramètres globaux d'Apache2.

  • httpd.conf : historiquement le principal fichier de configuration d'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 les répertoires référencés 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 octets 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

Cette section explique les paramètres de configuration essentiels pour Apache2. Referez vous à la documentation Apache2 pour plus de détails.

  • 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 be 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 systemctl restart apache2.service

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 systemctl restart apache2.service

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.

  • The ErrorDocument directive allows you to specify a file for Apache2 to use for specific error events. For example, if a user requests a resource that does not exist, a 404 error will occur. By default, Apache2 will simply return a HTTP 404 Return code. Read /etc/apache2/conf-available/localized-error-pages.conf for detailed instructions for using ErrorDocument, including locations of example files.

  • By default, the server writes the transfer log to the file /var/log/apache2/access.log. You can change this on a per-site basis in your virtual host configuration files with the CustomLog directive, or omit it to accept the default, specified in /etc/apache2/conf-available/other-vhosts-access-log.conf. You may also specify the file to which errors are logged, via the ErrorLog directive, whose default is /var/log/apache2/error.log. These are kept separate from the transfer logs to aid in troubleshooting problems with your Apache2 server. You may also specify the LogLevel (the default value is "warn") and the LogFormat (see /etc/apache2/apache2.conf for the default value).

  • 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>.

You can install additional Apache2 modules and use them with your Web server. For example, run the following command at a terminal prompt to install the MySQL Authentication module:

sudo apt 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 systemctl restart apache2.service

Inversement, a2dismod désactivera un module :

sudo a2dismod auth_mysql
sudo systemctl restart apache2.service

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. Exécutez la commande suivante à l'invite du terminal 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 systemctl restart apache2.service

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

Pour que plusieurs utilisateurs soient en mesure d'écrire dans le même répertoire, il sera nécessaire d'accorder la permission d'écriture à un groupe qu'ils partagent en commun. Les exemples suivants accordent l'autorisation partagée d'écriture dans /var/www/html pour le groupe «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=rw "{}" \;

These commands recursively set the group permission on all files and directories in /var/www/html to read write and set user id. This has the effect of having the files and directories inherit their group and permission from their parrent. Many admins find this useful for allowing multiple users to edit files in a directory tree.

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

Références

  • La documentation Apache2 contient des informations détaillées sur les directives de configuration. Également, allez voir apache2-doc; le paquet pour les documents officiels Apache2.

  • 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.