Cette page explique comment utiliser Webmin pour configurer le serveur Web Apache . Il couvre les hôtes virtuels, le contrôle d'accès IP, les restrictions de mot de passe et bien plus encore.
Introduction à Apache
Apache est le serveur HTTP le plus populaire d'Internet, en raison de son coût nul, de sa large disponibilité et de son large éventail de fonctionnalités. Toutes les distributions Linux l'incluent en tant que package standard, et il peut être installé ou compilé pour toutes les autres variantes Unix prises en charge par Webmin. Cependant, il a un très grand nombre de directives d'option définies dans un fichier de configuration texte, et peut donc être difficile à configurer pour un administrateur inexpérimenté.
Au fil des années depuis son introduction, de nombreuses versions d'Apache ont été publiées. En commençant par 1.0 et en passant aux séries 1.3 et 2.2 actuelles, chaque version a inclus plus de fonctionnalités et d'options. La fonctionnalité de base du service Web et la disposition du fichier de configuration sont restées essentiellement les mêmes, même si l'implémentation interne a considérablement changé.
Apache a une conception modulaire, dans laquelle chaque module est responsable d'une partie de son ensemble de fonctionnalités global. Il existe plusieurs modules standard qui sont inclus avec presque toutes les installations d'Apache, et bien d'autres qui sont facultatifs ou doivent être téléchargés séparément. Les modules peuvent être compilés dans l'exécutable du serveur Web ou chargés dynamiquement à partir de bibliothèques partagées au moment de l'exécution. Cette architecture modulaire peut être utilisée pour économiser de la mémoire en évitant d'avoir à charger des modules qui ne fournissent aucune fonctionnalité utile pour un système particulier.
Apache prend sa configuration à partir de plusieurs fichiers texte, chacun contenant une série de directives, généralement une par ligne. Chaque directive a un nom et une ou plusieurs valeurs, et définit une option telle que le chemin d'accès à un fichier journal ou le type MIME pour certains fichiers. Les directives reconnues par Apache dépendent des modules utilisés. La plupart des modules ajoutent la prise en charge de plusieurs directives pour configurer les fonctions qu'ils fournissent.
Souvent, vous souhaiterez héberger plusieurs sites Web sur un seul serveur. Apache peut être configuré pour utiliser une configuration différente selon le site Web qui a été demandé par un navigateur. Chacun de ces sites est appelé un hôte virtuel et est défini dans le fichier de configuration avec une section spéciale
De même, les sections
Une autre méthode pour créer des directives qui ne s'appliquent qu'à un seul répertoire consiste à les placer dans un fichier de configuration spécial nommé .htaccess qui réside dans le répertoire lui-même. Souvent, ces fichiers seront créés par des utilisateurs réguliers, afin qu'ils puissent configurer leurs propres sites Web sans avoir besoin d'un accès complet au fichier de configuration principal. Ceci est très utile sur un système qui héberge plusieurs sites appartenant chacun à un utilisateur Unix différent, plutôt que sur un système avec un seul site Web configuré par le propriétaire du serveur.
Le module Serveur Web Apache
C'est l'un des modules Webmin les plus complexes et les plus puissants, car il vous permet de configurer presque toutes les fonctionnalités d'Apache. Il peut déterminer la version d'Apache installée sur votre système et les modules qu'il utilise, et ajuste son interface utilisateur en conséquence afin que vous ne puissiez modifier que les directives que le serveur Web comprend. Cependant, l'interface est généralement la même pour toutes les versions d'Apache.
Parce qu'il y a tellement de directives et que le module tente de permettre la configuration de chacune d'elles, il regroupe les directives dans des catégories telles que Processus et limites, Mise en réseau et adresses et Programmes CGI. Ces catégories sont représentées par des icônes qui apparaîtront lorsque vous ouvrirez un serveur virtuel, un répertoire ou un fichier d'options dans le module. Dans tous les cas, vous pouvez afficher et modifier les paramètres de chaque catégorie en cliquant sur son icône.
Apache a un grand nombre de modules standards, et un nombre encore plus grand de modules séparés qui ont été développés par d'autres personnes. Webmin ne prend pas en charge l'édition de directives dans la plupart de ces directives non standard, telles que mod_perl et mod_php. Cependant, il ignorera en toute sécurité toute directive de fichier de configuration qu'il ne comprend pas, de sorte que les paramètres des modules non pris en charge que vous définissez manuellement ne seront pas endommagés.
Lorsque vous ouvrez le module Apache, la page à onglets ci-dessous s'affiche :
La page principale du module Apache WebserverDans le premier onglet se trouvent des icônes pour les différentes catégories d'options globales, ainsi que quelques fonctionnalités supplémentaires. Dans le second se trouve une liste de tous les serveurs virtuels actuels, et dans le troisième se trouve un formulaire pour ajouter un nouvel hôte virtuel. Si vous avez un très grand nombre de serveurs virtuels sur votre système (plus de 100 par défaut) un formulaire de recherche de serveurs s'affichera à la place. Le premier serveur sera toujours le serveur par défaut spécial , qui contient des directives qui s'appliquent à tous les autres serveurs virtuels et gère les requêtes que les autres serveurs ne gèrent pas.
Naturellement, le module Apache ne fonctionnera pas si Apache n'est pas installé sur votre système. Si tel est le cas, la page principale affichera un message d'erreur à la place du formulaire de configuration du module ou de la liste des serveurs virtuels. Toutes les distributions Linux incluent un ou plusieurs packages sur leur CD-ROM ou leur site Web. Installez-les à partir de là à l'aide du module Packages logiciels avant de continuer.
Étant donné que le module suppose que les fichiers exécutables et de configuration d'Apache se trouveront aux emplacements utilisés par le package de votre distribution, il signalera la même erreur concernant le logiciel non installé si vous l'avez compilé et installé manuellement. Si tel est le cas, cliquez sur Configuration du module liez et ajustez les chemins vers les emplacements corrects pour votre système.
Sur les versions d'Unix qui n'incluent pas Apache par défaut, Webmin suppose qu'il sera installé à partir de la distribution source standard de www.apache.org. Si vous avez installé le serveur Web à partir d'un package optionnel mis à disposition pour votre système d'exploitation, la page principale se plaindra qu'il n'est pas installé et vous devrez ajuster la configuration du module.
L'interface utilisateur du module est assez complexe et comporte un grand nombre de pages, de formulaires et de sous-pages en raison de la complexité et de la puissance des fichiers de configuration d'Apache. Cependant, certains éléments de l'interface sont répétés sur de nombreuses pages tout au long du module, tels que :
- Icônes de catégorie Lorsque vous cliquez sur l'icône d'un serveur virtuel, d'un répertoire ou d'un fichier d'options, un tableau d'icônes portant des noms tels que Types MIME et Programmes CGI s'affiche en haut de la page. Sous chacune de ces icônes se trouvent des champs et des tableaux pour configurer les options liées à l'étiquette de l'icône sous laquelle elles se trouvent. Cette mise en page couramment utilisée décompose le grand nombre d'options Apache modifiables en catégories, car il y a beaucoup trop de champs à afficher sur une seule page. Les icônes exactes qui s'affichent et les champs situés en dessous diffèrent selon la partie de la configuration du serveur Web que vous modifiez et la version d'Apache installée. Cependant, leur mise en page de base est toujours la même.
- Champs des tableaux Sur de nombreux formulaires, certains champs utilisent des tableaux pour saisir plusieurs valeurs telles que les types MIME et leurs extensions de fichier associées. Il n'y a pas de limite au nombre de lignes que chaque table peut avoir, mais Webmin n'affichera qu'une seule ligne vide dans chaque table à la fois. Cela réduit la taille des formulaires contenant de nombreux tableaux, mais signifie que vous ne pouvez ajouter qu'une seule nouvelle ligne à un tableau à la fois. Pour en ajouter plusieurs, vous devrez enregistrer le formulaire puis le saisir à nouveau, ce qui entraînera l'affichage d'une nouvelle ligne vide sous celle que vous venez de remplir.
Les sections ci-dessous expliquent plus en détail les icônes sur lesquelles cliquer et les tableaux à remplir lors d'opérations telles que l'activation des scripts CGI et la définition des types MIME.
Démarrer et arrêter Apache
Avant que les navigateurs puissent se connecter au serveur Web Apache sur votre système, son processus serveur doit être démarré. Vous pouvez vérifier s'il est en cours d'exécution en regardant en haut de l'une des pages du module. Si les liens libellés Appliquer les modifications et Arrêter Apache apparaît, alors il est actuellement actif. Cependant, si seul le lien *Démarrer Apache* leur apparaît, il n'est pas encore en cours d'exécution.
Pour le démarrer, cliquez sur Démarrer Apache lien. Si tout se passe bien, la page sur laquelle vous vous trouvez actuellement sera réaffichée et les liens en haut devraient changer pour indiquer qu'elle est en cours d'exécution. Sinon, un message d'erreur apparaîtra expliquant ce qui s'est passé - la cause la plus probable sera une erreur dans le fichier de configuration.
Pour arrêter le serveur Web une fois qu'il est en cours d'exécution, cliquez sur Arrêter Apache lien sur n'importe quelle page du module. Dans le cas peu probable où Webmin ne parviendrait pas à arrêter le serveur, une page de message d'erreur s'affichera. S'il est arrêté avec succès, la même page s'affichera à nouveau avec les liens en haut modifiés pour indiquer qu'il n'est plus en cours d'exécution.
Lorsqu'Apache est actif, chaque page aura un Appliquer les modifications lien en haut qui peut être utilisé pour signaler au serveur web de recharger sa configuration actuelle. Après avoir effectué des modifications dans ce module (sauf celles dans les fichiers .htaccess), ce lien doit être cliqué pour les rendre actifs. Contrairement aux autres modules Webmin qui ont un bouton Appliquer sur la page principale, celui-ci l'a sur chaque page afin que vous n'ayez pas à revenir à l'index chaque fois que vous apportez une modification.
Modifier des pages sur votre serveur Web
Cette section explique comment rechercher et modifier les fichiers de votre système qui s'affichent lorsqu'un client se connecte à votre serveur Web Apache. Si vous savez déjà comment procéder, n'hésitez pas à l'ignorer et à passer à la section suivante.
Lorsqu'Apache est installé pour la première fois à partir d'un package ou de la source, sa configuration initiale ne comporte généralement aucun serveur virtuel configuré. Au lieu de cela, seul le serveur par défaut existera, servant des pages à tout client qui se connecte sur le port 80. Vous pouvez afficher les pages par défaut en exécutant un navigateur Web et en accédant à l'URL http://_yourhostname_/, ou http://_localhost_/ si vous exécutez le navigateur sur le même système que Webmin. La page qui apparaît sera probablement celle fournie avec Apache ou votre distribution Linux.
Le répertoire racine du document à partir duquel Apache sert les fichiers sera affiché sur la page principale du module à côté du serveur par défaut icône. Sur Redhat Linux par exemple, ce répertoire est /home/httpd/html par défaut. Les fichiers de ce répertoire peuvent être modifiés en se connectant en tant que root ou en utilisant le module File Manager de Webmin. Toute modification que vous apporterez sera immédiatement répercutée sur le site Web.
Si votre système ne doit héberger qu'un seul site Web statique, il n'est peut-être pas nécessaire de configurer d'autres aspects d'Apache. Vous pouvez simplement télécharger ou copier des fichiers HTML, image et autres dans le répertoire et ses sous-répertoires pour créer le site que vous souhaitez. Le fichier le plus important est index.html, qui est servi par Apache chaque fois qu'un navigateur ne demande pas une page spécifique. Parce que la plupart des gens iront d'abord sur http://_votreserveur_/, la page index.html sera la première qu'ils verront.
Pour faciliter l'édition, vous souhaiterez peut-être changer la propriété du répertoire racine du document et de tous ses fichiers en un utilisateur non root. Cependant, vous devez vous assurer qu'ils sont toujours lisibles par l'utilisateur sous lequel le processus du serveur Apache s'exécute, qui est généralement nommé httpd. Le moyen le plus simple de le faire est de rendre tous les fichiers et répertoires lisibles et exécutables par le monde entier.
Création d'un nouvel hôte virtuel
Si vous souhaitez héberger plusieurs sites Web sur votre système, vous devrez créer un hôte virtuel Apache pour chacun d'eux. Avant de pouvoir ajouter un site, son adresse doit d'abord être enregistrée dans le DNS, soit sur un serveur DNS de votre système, soit sur un autre hébergeur. Si les fichiers du site doivent appartenir à un utilisateur Unix différent de celui qui possède le répertoire racine du document, alors il doit également être créé en premier.
L'ensemble du processus d'ajout d'un serveur virtuel, y compris les étapes ci-dessus, est :
- Choisissez un nom d'hôte qui sera utilisé dans l'URL du nouveau site Web, par exemple www.example.com .
- Décidez si votre nouveau site sera basé sur l'adresse IP ou sur le nom. Un site basé sur le nom fonctionnera bien avec tous sauf pour les anciens navigateurs, et est donc de loin le meilleur choix de nos jours. Un site basé sur IP fonctionnera avec n'importe quel navigateur, mais nécessite que sa propre adresse IP distincte soit ajoutée à votre système. Étant donné que les adresses IP sont souvent rares, cela n'a de sens que si vous devez également configurer un serveur FTP ou POP3 virtuel pour le domaine.
- Si votre site doit être basé sur IP, utilisez le module de configuration réseau (traité dans Configuration réseau) pour ajouter une nouvelle adresse IP virtuelle à l'interface réseau externe de votre système. Assurez-vous qu'il sera activé au démarrage et qu'il est actif maintenant. Si votre système n'a qu'une seule adresse IP Internet statique attribuée par votre FAI, les adresses IP virtuelles supplémentaires que vous y ajoutez ne fonctionneront pas. Dans ce cas, vous devrez plutôt utiliser un serveur virtuel basé sur le nom ou demander à votre FAI de vous attribuer plusieurs adresses.
- Si example.com domaine existe déjà sur un serveur DNS, ajoutez un enregistrement pour www.example.com avec l'adresse IP externe de votre système (pour un site nominatif) ou l'adresse choisie à l'étape précédente (pour un site IP). Si le domaine n'existe pas encore, vous devrez l'ajouter à un serveur DNS et l'enregistrer auprès d'un registraire DNS comme Network Solutions. Dans tous les cas, la page BIND DNS Server explique en détail comment ajouter des enregistrements et des domaines.
- Si le site va utiliser le port HTTP standard 80 (ce qui est presque toujours ce que vous voulez), alors vous pouvez passer à l'étape 8. Sinon, sur la page principale du module Apache Webserver, cliquez sur Réseau et Adresses icône pour faire apparaître le formulaire illustré dans la première capture d'écran ci-dessous.
- Dans la ligne vide dans Écouter les adresses et les ports tableau, sélectionnez Tous sous l'adresse colonne et désélectionnez Par défaut sous le port colonne. Entrez ensuite le numéro de port TCP de votre site Web dans le champ à côté, puis cliquez sur Enregistrer bouton en bas de la page.
- Sur la page principale du module, faites défiler jusqu'au formulaire *Créer un nouveau serveur virtuel* sous la liste des hôtes virtuels existants.
- Si vous configurez un serveur virtuel basé sur IP, dans l'Adresse Dans ce champ, vous devez saisir l'adresse IP virtuelle qui a été ajoutée à l'étape 3. Si vous configurez un serveur virtuel basé sur le nom, saisissez plutôt l'adresse IP externe de votre système dans le champ. Si votre serveur Apache a été configuré pour accepter les connexions basées sur le nom sur n'importe quelle adresse IP, vous pouvez sélectionner l'option Tous option pour ce champ à la place. Voir l'explication ci-dessous pour plus de détails. Si votre nouveau serveur virtuel va utiliser un port autre que 80 et sera le seul serveur sur ce port, vous pouvez sélectionner Tous option ainsi afin qu'il gère toutes les demandes qui arrivent sur le port.
- Si vous configurez un serveur virtuel basé sur IP, désélectionnez l'option Ajouter un nom d'adresse de serveur virtuel case à cocher. Pour les serveurs basés sur le nom, il doit être laissé activé.
- Si le nouvel hôte virtuel va utiliser un port non standard, sélectionnez la dernière option pour le Port champ et entrez le numéro dans le champ à côté.
- Dans la racine du document , entrez le chemin complet du répertoire qui contiendra les fichiers de ce site Web. Par exemple, cela pourrait être /home/example/www .
- Dans le Nom du serveur champ, entrez les noms d'hôte que les clients utiliseront pour se référer à ce site Web, tels que www.example.com . Vous pouvez saisir plusieurs noms, tels que web.example.com et example.com s'il s'agit d'un serveur basé sur le nom qui doit être accessible à plusieurs URL différentes.
- À moins que vous n'ayez un fichier séparé sur votre système contenant tous les hôtes virtuels, laissez l'option Ajouter un serveur virtuel au fichier champ défini sur Fichier httpd.conf standard . Sinon, vous pouvez choisir Fichier sélectionné et entrez le chemin dans le champ à côté. Assurez-vous que le fichier choisi est bien utilisé par Apache (comme par une directive Include dans httpd.conf) ou le serveur virtuel sera inutile et n'apparaîtra pas dans Webmin. Si vous utilisez toujours le même fichier séparé pour stocker les hôtes virtuels, le Fichier auquel ajouter les serveurs virtuels champ expliqué dans le module Configurer le module Apache Webserver section ci-dessous peut être utile. S'il est défini, une autre option est ajoutée au champ *Ajouter un serveur virtuel au fichier* pour l'ajouter au fichier défini par cette option de configuration de module.
- Pour que Webmin copie toutes les directives d'un autre serveur virtuel vers celui que vous créez, sélectionnez-le dans Copier les directives de menu. Cela peut être utile si tous vos hôtes virtuels ont une configuration similaire.
- Lorsque vous avez terminé de remplir le formulaire, cliquez sur Créer bouton. Le nouveau serveur virtuel sera ajouté au fichier de configuration Apache et à la liste des serveurs sur la page principale.
- Cliquez sur l'icône du nouveau serveur virtuel, ce qui vous amènera à sa page d'options, illustrée dans la deuxième capture d'écran ci-dessous.
- Faites défiler jusqu'au formulaire sous Options par répertoire , et entrez le répertoire racine du document que vous avez choisi à l'étape 11 dans le Chemin domaine. Assurez-vous que le Type est défini sur Répertoire , et l'Regexp ? champ à Correspondance exacte .
- Cliquez sur Créer pour ajouter une nouvelle section au fichier de configuration du répertoire. Cela est nécessaire pour que vous puissiez accorder aux clients le droit de parcourir les fichiers qu'il contient, ce que la configuration par défaut du répertoire Apache refuse.
- Cliquez sur la nouvelle icône du répertoire qui a été ajouté à la page des options du serveur virtuel. Cela vous amènera à la page des options de répertoire, illustrée dans la troisième capture d'écran ci-dessous.
- Cliquez sur Options de document et sur le formulaire qui s'affiche, modifiez les Options du répertoire champ à *Sélectionné ci-dessous*. Sous le Définir pour le répertoire colonne, modifiez l'entrée pour Générer des index de répertoire à Oui . Cliquez ensuite sur Enregistrer bouton en bas de la page.
- Pour rendre toutes vos modifications actives, cliquez sur Appliquer les modifications bouton en haut de n'importe quelle page.
- Vous ou l'utilisateur propriétaire du serveur virtuel pouvez maintenant commencer à ajouter des fichiers au répertoire racine du document. Vous pouvez le tester en ouvrant l'URL (telle que http://_www.example.com_/) dans votre navigateur Web pour vous assurer que tout fonctionne correctement.
Lorsqu'Apache reçoit une requête HTTP, il doit d'abord déterminer à quel serveur virtuel la requête est destinée. Il recherchera d'abord un serveur virtuel basé sur le nom dont le nom d'hôte correspond à l'hôte demandé par le client, et dont l'adresse et le port sont les mêmes que ceux auxquels le client s'est connecté. Si aucun n'est trouvé, le premier serveur virtuel défini pour l'adresse et le port sera utilisé à la place, ou s'il n'y en a pas, la demande sera traitée par le serveur par défaut.
Les serveurs virtuels basés sur le nom ne peuvent être utilisés que sur les adresses répertoriées dans les Adresses pour les serveurs virtuels de nom sur la page globale Réseaux et adresses. Si vous suivez les instructions ci-dessus, une adresse sera automatiquement ajoutée à cette liste lorsque vous créerez un nouveau serveur virtuel. Si tous les serveurs virtuels de votre système vont être basés sur le nom, vous pouvez ouvrir cette page, entrer * dans le champ et cliquer sur Enregistrer afin qu'Apache traite ces requêtes sur n'importe quelle adresse IP. Cela a également du sens si votre système a une adresse IP attribuée dynamiquement et que vous souhaitez servir plusieurs hôtes virtuels.
Une fois qu'un serveur virtuel a été créé, vous pouvez modifier ses paramètres ou le supprimer en suivant ces étapes :
- Sur la page principale du module, cliquez sur l'icône du serveur virtuel. Cela vous mènera à la page des options du serveur illustrée dans la capture d'écran ci-dessus.
- Faites défiler jusqu'aux Détails du serveur virtuel formulaire en bas de page.
- Modifier l'adresse , Port et d'autres champs à ce que vous voulez et cliquez sur Enregistrer bouton. Ces champs ont la même signification que sur le formulaire de création de serveur virtuel. Toutefois, si l'adresse est modifiée sur un serveur virtuel basé sur le nom, vous devrez peut-être également la modifier sur la page globale Réseaux et adresses. Ou si vous voulez vous débarrasser du serveur virtuel et de toutes les directives de configuration qu'il contient, cliquez sur Supprimer le serveur virtuel bouton à la place.
- De retour sur la page principale du module, cliquez sur Appliquer les modifications lien pour activer les nouveaux paramètres.
Vous ne pouvez pas modifier les paramètres du serveur par défaut, ni le supprimer.
Configuration des options par répertoire
Apache vous permet de spécifier différentes options pour certains répertoires, soit pour tous les serveurs virtuels, soit pour un seul. Y compris les répertoires, vous pouvez en fait définir des options qui s'appliquent à trois types d'objets sur votre serveur Apache :
- Répertoire Les options s'appliquent à un répertoire spécifié et à tous les fichiers qu'il contient ou dans les sous-répertoires qu'il contient.
- Fichiers Les options s'appliquent aux fichiers avec un nom spécifié dans n'importe quel répertoire.
- Emplacement Les options s'appliquent à tous les fichiers ou répertoires demandés par une URL dont le chemin commence par l'emplacement spécifié. Par exemple, dans l'URL http://www.example.com/foo le chemin serait /foo .
Chaque fois qu'Apache traite une requête, il vérifie les options qui s'y appliquent dans un ordre fixe. Ceux des sections de répertoires et des fichiers .htaccess sont lus en premier afin que les répertoires les plus spécifiques soient vérifiés en premier. Ils sont ensuite suivis de fichiers, puis de sections d'emplacement. Ensuite, les options du serveur virtuel auquel la demande a été adressée (le cas échéant) sont lues, et enfin les options du serveur par défaut.
La page des options par répertoireCela signifie que les options définies pour un répertoire remplaceront les mêmes options définies dans un répertoire de niveau supérieur ou dans le serveur virtuel dont il est membre. Pour définir des options pour un répertoire, des fichiers ou un emplacement d'URL, les étapes à suivre sont :
- Même si les options que vous allez définir s'appliquent à un répertoire, elles doivent être définies sous l'un des serveurs virtuels ou le serveur par défaut. S'ils se trouvent sous un hôte virtuel, ils ne s'appliqueront qu'aux demandes adressées à ce serveur pour les fichiers dans le répertoire ou l'URL choisi. Mais s'ils sont sous le serveur par défaut, les demandes à n'importe quel hôte virtuel pour les fichiers du répertoire seront effectuées. Sur la page principale du module, cliquez soit sur le Serveur par défaut ou l'icône d'un serveur virtuel auquel vous souhaitez limiter les options de répertoire. Pour les répertoires, il est généralement plus simple de placer leurs options sous le serveur par défaut, car chaque hôte virtuel possède généralement son propre répertoire racine de documents distinct. Les options d'emplacement d'URL doivent cependant être placées sous le serveur virtuel auquel elles sont liées, car le même chemin d'URL peut être utilisé de différentes manières sur plusieurs hôtes virtuels. Il en va de même pour les options de fichiers.
- Sur la page des options du serveur qui s'affiche (illustrée à la Figure 29-4), faites défiler jusqu'au formulaire *Créer des options de répertoire, de fichiers ou d'emplacement*.
- À partir du Type menu, choisissez l'une des options décrites ci-dessus.
- Si vous définissez des options pour un répertoire, saisissez-le dans le Chemin champ tel /home/example/www/images . Vous pouvez également entrer un chemin générique tel que /home/example/w* , ce qui entraînera l'application des options à tous les répertoires correspondants. Si les options sont définies pour un emplacement d'URL, saisissez la partie de l'URL après le nom d'hôte dans le champ Chemin, par exemple /images . Vous pouvez également utiliser des caractères génériques du shell tels que * et ? dans l'URL également. Si vous définissez des options pour les fichiers, saisissez un nom de fichier dans le Chemin champ tel que secret.html . Encore une fois, des caractères génériques peuvent être utilisés dans le nom de fichier, par exemple secret*.
- Si vous souhaitez pouvoir utiliser des expressions régulières complexes dans le répertoire, le nom de fichier ou l'emplacement de l'URL, définissez la Regexp ? champ à Match regexp . Cela vous permettra d'utiliser des caractères d'expression régulière Perl comme [, ], +, . et * dans le chemin.
- Cliquez sur Créer bouton pour ajouter la nouvelle section de répertoire à la configuration Apache. La page des options du serveur virtuel s'affichera à nouveau, mais avec une nouvelle icône pour le répertoire.
Maintenant que vous avez créé une nouvelle icône pour un répertoire, un emplacement d'URL ou un nom de fichier, vous pouvez définir les options qui s'y appliquent. L'une des modifications les plus courantes par répertoire consiste à configurer la manière dont les fichiers sont répertoriés lorsqu'un navigateur demande un répertoire avec une URL telle que http://www.example.com/images/. Par défaut, s'il y a un fichier index.html dans le répertoire il sera affiché, sinon une page listant tous les fichiers qu'il contient sera affichée à la place.
Si vous souhaitez modifier le nom du fichier d'index, le style de la liste des répertoires ou tout autre paramètre lié à l'indexation, les étapes à suivre sont :
- Cliquez sur l'icône du répertoire que vous souhaitez configurer sur la page des options du serveur virtuel. Cela vous mènera à la page des options de répertoire illustrée à la Figure 29-5.
- Cliquez sur Indexation des répertoires pour afficher un formulaire permettant de définir les options d'indexation et de listage.
- Pour modifier l'apparence des listes d'annuaires, définissez le champ *Options d'index d'annuaire* sur Sélectionné ci-dessous et modifiez les champs dans la case en dessous. Les valeurs par défaut généreront une liste très simple de fichiers, mais vous pouvez l'améliorer en définissant les options suivantes :
- Afficher des index de répertoire sophistiqués Si activé, la liste des fichiers inclura leur icône, leur taille et leur date de modification.
- Afficher le titre HTML comme description Si activé, la description des fichiers HTML sera extraite de leurs balises
. - Hauteur de l'icône Cette option vous permet de modifier la hauteur des icônes incluses dans la liste des répertoires. S'il est défini sur Par défaut , la hauteur des options standard d'Apache sera utilisée.
- Largeur de l'icône Comme l'option précédente, celle-ci vous permet de spécifier la largeur des icônes dans la liste des répertoires.
- Autoriser l'utilisateur à trier les colonnes Lorsque cette option est activée, les utilisateurs peuvent trier la liste des fichiers en cliquant sur les en-têtes de colonne, en supposant qu'ils sont affichés.
- Afficher les descriptions des fichiers Si cette option est activée, la liste des répertoires inclura une description pour chaque fichier tirée de son type MIME ou de son titre HTML.
- Balises d'en-tête HTML de sortie Lorsqu'elle est activée, la liste des répertoires inclura les balises normales et qui devraient commencer chaque page HTML. Vous ne voudrez le désactiver que si vous fournissez vos propres fichiers d'en-tête et de pied de page.
- Afficher les dernières heures modifiées Lorsqu'elle est activée, la liste des répertoires inclura la date de la dernière modification pour chaque fichier.
- Afficher les tailles de fichier Lorsqu'il est activé, la liste inclura la taille de chaque fichier.
- Inclure l'icône dans le lien Si cette option est activée, l'icône dans la liste sera un lien vers le fichier lui-même. Sinon, seul le nom du fichier est un lien.
- Largeur du nom de fichier Cette option contrôle la longueur de la colonne de nom de fichier dans la liste des répertoires. Vous pouvez saisir un nombre de caractères ou * pour dimensionner la colonne à la longueur du nom de fichier le plus long.
- Largeur de la description Cette option contrôle la longueur de la colonne de description dans la liste des répertoires, le cas échéant. Vous pouvez saisir un nombre de caractères ou * pour dimensionner la colonne à la longueur de la description la plus longue.
- Afficher les répertoires en premier Si cette option est activée, la liste affichera tous les répertoires au-dessus de tous les fichiers, quels que soient les autres fichiers. Les options disponibles dépendent de la version d'Apache que vous avez installée sur votre système. Ceux listés ci-dessus sont valables pour la version 1.3.19, mais si vous avez une version plus récente, plus d'options peuvent être disponibles.
- Si vous souhaitez qu'Apache renvoie un fichier autre que celui par défaut (généralement index.html) lorsqu'un navigateur demande le répertoire, saisissez une liste de noms de fichiers dans les fichiers d'index du répertoire domaine. Plus d'un peut être entré, et le premier qui est trouvé sera utilisé. Si aucun des fichiers d'index n'est trouvé, une liste de répertoires utilisant les options choisies à l'étape 3 sera renvoyée au navigateur à la place.
- Pour que le serveur Web ignore certains fichiers lors de la génération de la liste des fichiers dans le répertoire, entrez leurs noms de fichiers dans l'index Fichiers à ignorer dans le répertoire domaine. Vous pouvez utiliser des caractères génériques du shell dans les expressions régulières, telles que *.doc .
- Pour insérer un fichier HTML au début de la liste des répertoires, entrez son nom de fichier (relatif au répertoire) dans le fichier d'en-tête d'index de répertoire domaine.
- De même, pour qu'un fichier soit ajouté à la fin de la liste des répertoires, saisissez-le dans le fichier de pied de page d'index de répertoire domaine.
- Pour contrôler l'ordre par défaut du répertoire, désélectionnez Par défaut dans le Trier l'index des répertoires par champ et sélectionnez un ordre et une colonne à trier dans les deux menus à côté.
- Vous pouvez définir des descriptions pour les fichiers en remplissant le tableau *Descriptions d'index de répertoires*. Dans la ligne vide du tableau, entrez un court message décrivant le fichier dans la Description et une liste de noms de fichiers ou de noms génériques dans la colonne Noms de fichiers colonne. Étant donné qu'une seule ligne vide est affichée à la fois, vous devrez revoir cette page après avoir ajouté chaque description si vous souhaitez en saisir plusieurs.
- Enfin, cliquez sur Enregistrer bouton en bas de la page pour enregistrer vos modifications et revenir à la page des options du répertoire. Pour les activer, cliquez sur Appliquer les modifications lien n'importe où dans le module Apache.
La plupart de ces options peuvent également être définies pour un serveur virtuel entier en cliquant sur l'icône Indexation de répertoire sur la page des options du serveur virtuel. Dans ce cas, ils s'appliqueront à tous les fichiers demandés à l'hôte virtuel, sauf s'ils sont remplacés par des options pour un répertoire ou un emplacement d'URL.
Sur la page des options de répertoire, il existe de nombreuses autres icônes sur lesquelles vous pouvez cliquer pour définir des options qui s'appliquent uniquement à ce répertoire, chemin d'URL ou nom de fichier. Certaines d'entre elles sont expliquées dans d'autres sections plus loin dans ce chapitre, telles que Alias et redirections et *Mot de passe protégeant un répertoire*.
Vous pouvez modifier le répertoire, les noms de fichiers ou l'emplacement de l'URL auxquels les paramètres s'appliquent à l'aide des Options applicables à formulaire en bas de la page des options du répertoire. Il a exactement les mêmes champs que le formulaire de création décrit au début de cette section. If you make any changes, click the Save button to update the Apache configuration and then the Apply Changes link to make them active. Or to remove the directory configuration and all its options, click on Delete à la place.
Creating aliases and redirects
Normally, there is a direct relationship between the path in URL and the file that is returned by the webserver. For example, if a browser requests http://www.example.com/images/foo.gifand the document root for www.example.com is /home/example/www , then the file /home/example/www/images/foo.gif would be read by the webserver and returned to the client.
This can be changed though by using what Apache calls aliases. An alias maps a particular URL path to a file or directory, which does not necessarily have to be under the document root. So in the example above, the /images URL path might actually be aliases to the directory /www/images , which would cause the file /www/images/foo.gif to be read instead.
Aliases can be defined globally or in a virtual server. To create one, the steps to follow are :
- On the module's main page, click on the icon for the virtual server that you want to create the alias under. If you want it to apply to all virtual servers (or you don't have any), click on the *Default Server *icon instead.
- On the virtual server options page that appears, click on the Aliases and Redirects icon. This will take you to the page in the screenshot below.
- Fill in the empty row in the Document directory aliases table with the URL path (under From ) and the file or directory that it should map to (under To ). If you are editing the default server, there may already be several entries in this table that are part of the standard Apache configuration. There will always be exactly one empty row in the table. If you need to add more than one alias, you will need to re-visit this page after filling in the row and saving.
- Cliquez sur Enregistrer button to have your new alias stored in the Apache configuration. The browser will return to the virtual server options page.
- To make the alias active, click on the Apply Changes link at the top of the page.
The aliases and redirects form
Existing aliases can be editing by just changing the entries in the Document directory aliases table and then clicking Save . You should not change the alias for /icons in the default server though, as this is used by Apache when it generates icons for directory listings. If you want to delete an alias, just delete the contents of both its fields in the table.
Aliases can also be created that use Perl regular expressions to match more complex URL paths. These must be entered into the Regexp document directory aliases table on the Aliases and Redirects form, which has the same columns as the *Document directory aliases* table described above. The difference is that any regular expression can be entered into the From field, such as ^/images/(.*)\.gif$ . The To field can taken a string that refers to bracketed sections in the expression, such as /images/$1.jpg . This would convert any request for a GIF file into one for the JPEG with the same name.
Redirects are similar to aliases, but have a different purpose and work in a different way. Whenever a client requests a URL path that has been redirected, Apache will tell it to go to another URL (possibly on another server) instead. For example, you might redirect all requests to http://www.example.com/webmin/ to ''http://www.webmin.com/''. Unlike the way aliases behave, if a browser requests a page like /webmin/foo.gif it will not be redirected to ''http://www.webmin.com/foo.gif'' - it will just go to the URL ''http://www.webmin.com/'' instead.
Redirects are implemented by the webserver sending the special 302 status code to the browser, which tells it to go to a new location. It is quite possible for the new URL to be a redirect itself, and you can even create a loop of redirects - not that this is a good idea.
To set up redirection for a path on your server, the steps to follow are :
- On the module's main page, click on the icon for the virtual server that you want to create the redirect under. If you want it to apply to all virtual servers, click on the *Default Server *icon instead.
- On the virtual server options page that appears, click on the Aliases and Redirects icon to go to the page in Figure 29-6.
- In the empty row of the *URL redirects *table, enter the URL path on your server under the From column, such as /webmin . Under the To column, enter the URL that requests should be redirected to, such as http://www.webmin.com/ . The Status field is optional, but can be filled in if you want to change the HTTP status code that will be used for this redirect. The default is 302, which indicates a temporary redirection. However, you can 301 to tell browsers that the direction is permanent, or 303 to tell them that the original content has been replaced. There will always be exactly one empty row in the table. If you need to add more than one redirect, you will need to re-visit this page after filling in the row and saving.
- Cliquez sur Enregistrer button to have your new redirect stored in the Apache configuration. The browser will return to the virtual server options page.
- To make the redirection active, click on the Apply Changes link at the top of the page.
As with aliases, existing redirects can be edited by just changing the entries in the URL redirects table and then clicking Save . To delete a redirect, just delete the contents of all of its fields in the table.
You can also create regular expression redirects that behave in a similar way to regexp aliases, using the Regexp URL redirects table on the same page. Under the From column you can enter a URL path expression such as ^/webmin/(.*)$ , and under the To column a URL that can refer to bracketed parts of the path, such as http://www.webmin.com/$1 . In this example, an request by a client for a page under /webmin would be redirected to the same file at www.webmin.com .
Also on the Aliases and Redirects page are two more tables labelled Permanent URL redirects and Temporary URL redirects . The first behaves exactly the same as a normal redirection, but with the status code always set to 301, indicating a permanent redirection. The second also behaves like a normal redirect, but always uses a status code of 302 (temporary redirection). This option is really quite useless, as normal redirections default to using status 302 if one is not specified.
Redirects can also be defined in the options for directories, URL locations, filenames and .htaccess files. When editing the options for one of these (described in the *Setting per-directory options* section), the exact same icon and table are available as when setting up aliases for a virtual server. Naturally, a redirect in a directory only makes sense if the URL path being redirected actually refers to that some file or sub-directory that it contains. The same goes for redirects in URL locations - the path being redirected must start with the location's path.
If Apache on your system has been compiled with or dynamically loads the proxy module (covered in the *Configuring Apache as a proxy server* section below), tables labelled *Map locale to remote URLs* and Map remote Location:headers to local will appear on the Aliases and Redirects form under the virtual server options page. These allow you to specify a URL path that when requested will cause Apache to itself request pages from another website and return them to the browser. Even though the URL that the user is accessing is on your server and their browser is connecting only to your system, the content is actually being loaded from elsewhere.
To set up this URL mapping, the steps to follow are :
- On the module's main page, click on the icon for the virtual server that you want to create the mapping under. If you want it to apply to all virtual servers, click on the *Default Server* icon instead.
- On the virtual server options page that appears, click on the Aliases and Redirects icon to go to the page in Figure 29-6.
- In the empty row in the Map locale to remote URLs table, enter a URL path on your server (like /webmin ) into the first field, and the full URL that you want the pages to be requested from into the second (like http://www.webmin.com/ ).
- In the empty row in the Map remote Location:headers to local table, enter the same full remote URL into the first field and the URL path on your server into the second. This second table controls the conversion of redirects issued by the remote server, and should almost always be set. If it is not set, whenever the remote server issues a redirect the browser will end up connecting directly to it instead of to your server.
- Cliquez sur Enregistrer button to have your new mapping stored in the Apache configuration. The browser will return to the virtual server options page.
- To make the mapping active, click on the Apply Changes link at the top of the page.
You can test it out by going to the mapped URL path on your system, and you should see pages that have been requested from the remote server. The process is not totally transparent though, because it does not convert HTML files in any way. So if in the example above the remote server contained an HTML page with a link like , following it would take the browser to /foo.html on your system, not /webmin/foo.html as you might expect. There is no solution to this problem, apart from making sure that the remote server always uses relative links and image paths.
Running CGI programs
CGI stands for Common Gateway Interface, and is a standard method for webservers to run external programs, pass them details of a browser's request, and read back any content that the program generates. CGI programs are one of the simplest way of adding dynamic pages to your webserver, and are relatively easy to set up and develop. Server-side includes (covered in the next section) are even simpler, but very limited in what they can do.
A CGI program can be written in any language as long as it follows certain rules. The most common is Perl, but C, Python, PHP or any other language that can access environment variables and produce output can be used. You can even write shell scripts that are valid CGI programs. This section is not going to explain the details of how to write them though - there are plenty of books that cover that already.
CGI programs are just files on your system, like any other HTML or image file. The difference is that when they are requested by a browser, Apache executes them and returns their output instead of the contents of the file. Because you only want this to happen for programs and not for HTML files, the server must be configured to identify certain files as CGI programs. This is normally done in one of two ways - by putting all CGI programs into a certain directory, or by giving them all a file extension like .cgi.
The choice is yours, but the latter option is simpler to use as you can freely mix CGI scripts, HTML and image files in the same directory. To set it up, the steps to follow are :
- On the module's main page, click on the icon for the virtual server that you want to set up CGI programs for. Or click on the *Default Server *icon if you want to use them on all servers.
- Click on the icon for the directory that you want CGI programs to be enabled under. Typically each virtual server will have an icon for options for its document root directory, but if not you can create one by following the steps in the *Setting per-directory options* section above. If you only want to allow CGI programs to be run in some sub-directory of the website, you can create a new directory icon for that as well.
- On the directory options page, click on the Document Options icon and change the Directory options field from Default to Selected below . Then set the rows Execute CGI programs and Generate directory indexes to Yes , and click the Save button at the bottom of the page. This tells Apache that CGI programs can be executed in the directory.
- Back on the directory options page, click on the MIME Types icon. In the Content handlers table, select cgi-script from the first blank menu under the Handler column, and enter .cgi into the field next to it under the Extensions colonne. Then click the Save button at the end of the form. This tells Apache to treat all files in the directory ending in .cgi as CGI programs.
- Finally, click the Apply Changes link on any page. You should now be able to create a file with a .cgi extension in the chosen directory, and test it out in a web browser.
An alternative to this approach is to specify a directory in which all files are treated as CGI programs. This has the advantage that they can be given any name you like, instead of being forced to have a .cgi extension. You can also set permissions on this directory to restrict who is allowed to create CGI programs, while still allowing others to edit normal HTML pages.
To set up a directory for CGI scripts, the steps to follow are :
- On the module's main page, click on the icon for the virtual server that you want to set up a CGI directory for. Or click on the *Default Server* icon if you want to set it up for all servers.
- Click on the CGI Programs icon to bring up a page for setting various CGI options.
- The CGI directory aliases table works in a very similar to the Document directory aliases table described in the previous section. However, in addition to mapping a URL path to a directory on your server it also tells Apache that any files accessed through that path should be treated as CGI programs. In the first empty row of the table, enter a URL path like /cgi-bin/ into the From field and a directory like /home/example/cgi-bin/ into the To domaine.
- Cliquez sur Enregistrer button at the bottom of the page to return to the virtual server options page. Then click the Apply Changes link to make the CGI directory active.
You should now be able to create CGI programs in the directory, and test them out in a web browser. On some Linux distributions, the default Apache configuration will already have a CGI directory available at the URL path /cgi-bin/, mapped to a directory like /home/httpd/cgi-bin/. If this is good enough for you, there is no need to follow the steps above - instead, you can just put CGI programs in that directory.
Normally, all CGI programs execute as the Unix user that the webserver runs as, typically named httpd or apache. On a system with multiple users who cannot be fully trusted, this is not a good thing - anything that one user's CGI program can do, everyone else's can as well. So for example if a user writes a CGI program that edits some file, he would have to make that file writeable by the httpd user, meaning that everyone else's CGI programs could write to it as well.
Fortunately, there is a solution. Apache comes with an optional program called suexec that can be used to have CGI programs run as some other Unix user, rather than as the webserver user. Typically the CGI programs under each virtual server will be run as the Unix user who owns that server's files. To set this up, the steps to follow are :
- Make sure that the suexec program exists on your system, and that it has setuid-root permissions. Apache typically expects to find it in /usr/sbin or /usr/local/apache/sbin, and most Linux distributions include it as a standard part of their Apache package. However, some do not have it setuid by default, so you may need to run chmod 6711 /usr/sbin/suexec to make it so.
- On the main page of the module, click on the icon for the virtual server that you want to have CGI programs run as a different user on. This will take you to the options page shown in Figure 29-4.
- Click on the User and Group icon on the virtual server options page.
- For the Run as Unix user field, select User name and enter the name of the user who owns the virtual server into the field next to it.
- Similarly, for Run as Unix group select Group name and enter the primary group of the user specified in the previous step.
- Cliquez sur Enregistrer button to return to the options page for the virtual server.
- To activate suexec for the first time, you need to stop and re-start Apache. Use the Stop Apache link at the top of the page to halt it, and then the Start Apache link to start it up again.
- To check that suexec is actually working, check the Apache error log file for a line containing suEXEC mechanism enabled that was logged when the webserver was re-started.
Because it can execute commands as any user on your system, suexec has many security restrictions to prevent misuse by normal users. It will only run CGI programs that are owned by the user and group specified in steps 4 and 5, and only if they are not writeable by any other user, or in a directory that is writeable by another user. The IDs of the user and group must be above minimums that are compiled into the program, to prevent programs owned by system users such as root or bin from being run. Finally, the program must reside under a directory that is compiled into suexec, and nowhere else on the filesystem.
This last restriction can be very annoying if you have a large number of virtual servers and want to enable the execution of CGI programs in their directories. The default allowed directory is typically the standard CGI directory for Apache, such as /home/httpd/cgi-bin. To change this, you will need to re-compile suexec with a different directory, such as /home.
Whenever suexec fails to run a CGI program, it fails with HTTP status code 500. Because there are many things that can go wrong, you should check the file suexec_log in the same directory as the other Apache logfiles to see why it is refusing to execute a particular program. For each failure, a line is written to this file explaining the problem, such as incorrect permissions or a file ownership mismatch.
Writing CGI programs can be difficult because when they fail, very little information is displayed in the browser. All you see is a message like 500 server error , which no explanation of the real cause. However, more detailed error information is written to the Apache error log file. This is usually named error_log, and can be found in the same directory as the Apache access log files. See the section below on Configuring logging for more details on how to find and change it.
Anything that a CGI programs outputs to STDERR will also be written to the error log, which is useful if you want your program to generate debugging information that is not sent to the web browser. Because many programming languages like Perl output error messages on STDERR if a script fails to compile or run, all such messages will also be written to the error log file.
The biggest problem with CGI programs is that the webserver has to launch a new process every time one is requested. If the CGI is written in Perl or PHP, the process then has to load the interpreter for that language which can itself be a large program. The end result is that processing a request for a CGI page takes much longer than a request for a static HTML or image file, and generates much more load on the server system.
For this reason, optional modules have been developed that allow the webserver to run Perl and PHP scripts using an interpreter that is part of the Apache process. These modules are called mod_perl and mod_php, and are included in the Apache package in many Linux distributions. Installing and configuring them is not covered in this chapter though.
Setting up server-side includes
Server-side includes allow you to create simple dynamic web pages without the complexity of writing an entire CGI program in a language like Perl. When active, some of the HTML files served by Apache are checked for special tags starting with appears in the HTML of page, it is replaced with the contents of the file something.html .
Server-side includes can also be used to access and set environment variables, to conditionally display HTML based on variables and to run CGI programs or shell commands and have their output included in the page. This section will not cover the tags that are available and the purposes though - instead, you should read the documentation on the Apache website or a good book on HTML.
Normally, allowing un-trusted users to create HTML pages containing server-side include tags is perfectly safe because they cannot be used to perform potentially dangerous operations like editing files on the server. The exception to this is the tag, which can be used to run an arbitrary shell command and have its output included in the web page. Because the command runs as the Unix user that Apache is running as (normally httpd), a user who is not allowed to create CGI programs may be able use this kind of tag to read or modify files that he would not normally be able to. For this reason, Apache can be configured to enable server-side includes with or without the risky exec tag.
Because checking an HTML file for server-side include tags is CPU intensive, they are often only activated for files with the .shtml extension. This way you can put static HTML in .html files and dynamic content into .shtml files, so that the server does not have to waste time looking for tags in files that do not contain them. However, it is also quite possible to have all .html files checked for server-side includes if you wish.
To turn on includes for a virtual server, the steps to follow are:
- On the module's main page, click on the icon of the virtual server that you want to enable server-side includes on. Or click on the Default Server icon to enable them for all virtual hosts.
- Click on the icon for the directory that you want server-side includes to be enabled under. Typically each virtual server will have an icon for options for its document root directory, but if not you can create one by following the steps in the *Setting per-directory options* section above. If you only want to enable server-side includes in some sub-directory of the website, you can create a new directory icon for that as well.
- On the directory options page, click on the Document Options icon and change the Directory options field from Default to Selected below . If you want to enable server-side includes without the exec tag, change the Server-side includes row to Yes . If you want to enable the potentially risky exec tag as well, change Server-side includes and execs row to Yes Au lieu. Either way, when they have been enabled click the Save button at the bottom of the page.
- Click on the MIME types icon on the directory options page. If you want to enable includes on all HTML files, find the *Content handlers* table to select server-parsed from the first empty menu under the Handler column, and enter .html into the field next to it under the Extensions colonne. This tells Apache that files ending in .html should be checked for server-side include tags. If you want to enable includes for only .shtml files, enter .shtml instead of .html under the Extensions colonne. Then in the Extra MIME types table enter text/plain into the first empty field under the Type column and .shtml into the field under Extensions next to it. This tells Apache that .shtml files should be checked for server-side include tags, and that they actually contain HTML.
- Finally, click the Save button at the bottom of the MIME Types page, and then the Apply Changes link back on the directory options page.
Once server-side includes are enabled, you can test them by creating an .html or .shtml file in the chosen directory with some special tags it in. Then open the page in your web browser to see the result. If for some reason server-side includes were not enabled properly, nothing will show up at all because the