Apache supporte en standard la gestion des domaines virtuels. C'est d'ailleurs le seul programme pour lequel je recommande d'utiliser le système de gestion des domaines virtuels fourni avec. Lorsque vous lancez un programme par l'intermédiaire d'inetd, il y a un coût supplémentaire, puisque le programme doit démarrer à chaque fois qu'il y a une demande de connexion, et vous obtenez des temps de réponse beaucoup plus longs, inacceptables pour le web. Apache intégre également un mécanisme pour stopper les connexions lorsqu'elles sont trop nombreuses.
Comme il est simplement indiqué ci-dessus, rendre virtuel Apache avec virtuald est une tres mauvaise idée. Le but de virtuald est de combler la lacune des serveurs qui n'ont pas leur propre systeme interne pour faire ce travail. Virtuald n'est pas fait pour remplacer du bon code qui remplit déjà la tâche.
Ce qui suit ne restera pas ici, c'est pour expliquer à ceux qui sont assez idiots pour le faire.
Éditez /etc/inetd.conf
vi /etc/inetd.conf # Ajouter cette ligne www stream tcp nowait www /usr/local/bin/virtuald \ virtuald /virtual/conf.www httpd -f /var/www/conf/httpd.conf
Éditez /var/www/conf/httpd.conf
vi /var/www/conf/httpd.conf # Où l'emplacement des fichiers de configuration d'Apache Il doit y avoir : ServerType standalone Remplacez-le par : ServerType inetd
Ensuite, configurez chaque cas du serveur Apache comme si vous n'aviez qu'un seul domaine.
Un fichier httpd.init n'est pas nécéssaire si le serveur est lancé par inetd.
Apache a trois fichiers de configuration access.conf
, httpd.conf
et srm.conf
. De nouvelles versions d'Apache ont rendues les trois
fichiers de configuration inutiles. Ainsi, je trouve que séparer en trois
sections la configuration la rend plus simple à gérer, donc je garderai
ce style dans le HOWTO.
Ce fichier de configuration est utilisé pour contrôler l'accès aux répertoires dans la structure du répertoire web. Voici un exemple de fichier de configuration qui montre comment avoir plusieurs options pour chaque domaine.
# /var/www/conf/access.conf: Configuration des accès globaux # Les options sont heritées du répertoire précedent # Mettre les options par défaut pour le répertoire principal <Directory /> AllowOverride None Options Indexes </Directory> # Créer un répertoire protegé par mot de passe pour un domaine <Directory /virtual/domain1.com/var/www/html/priv> AuthUserFile /var/www/passwd/domain1.com-priv AuthGroupFile /var/www/passwd/domain1.com-priv-g AuthName PRIVSECTION AuthType Basic <Limit GET PUT POST> require valid-user </Limit> </Directory> # Créer un autre domaine Server Side Include (SSI) <Directory /virtual/domain2.com/var/www/html> Options IncludesNOEXEC </Directory>
Ce fichier de configuration est utilisé pour contrôler les options principales du serveur Apache. Voici un exemple de fichier de configuration qui montre comment avoir différentes options pour chaque domaine.
# /var/www/conf/httpd.conf: Fichier de configuration principal du serveur # Début: Section principale ServerType standalone # Numéro du port Port 80 # Log des clients avec le nom et l'IP HostnameLookups on # Utilisateur qui lance le serveur User www Group www # Emplacement des fichiers de config, erreurs et log ServerRoot /var/www # Processus ID du serveur dans ce fichier PidFile /var/run/httpd.pid # Informations du processus interne du serveur ScoreBoardFile /var/www/logs/apache_status # Les options du Timeout et KeepAlive Timeout 400 KeepAlive 5 KeepAliveTimeout 15 # Nombre de Serveur à lancer MinSpareServers 5 MaxSpareServers 10 StarsServers 5 MaxClients 150 MaxRequestsPerChild 30 # Fin: Section de configuration principale # Début: Section de l'hébergement virtuel # Indique au serveur d'accepter les connexions pour IP:Port # Il y a une ligne pour chaque IP nécessaire donc, vous pouvez ignorer certains # domaines Listen 10.10.10.129:80 Listen 10.10.10.130:80 # La commande VirtualHost permet de spécifier un autre domaine virtuel sur le # serveur. La plupart des options d'Apache peuvent être spécifiées dans cette # section. <VirtualHost www.domain1.com> # E-mail à laquelle sont envoyées les erreurs ServerAdmin webmaster@domain1.com # Endroit où sont mis les documents du domaine virtuel DocumentRoot /virtual/domain1.com/var/www/html # Nom du serveur ServerName www.domain1.com # Fichiers de Log relatifs à l'option ServerRoot ErrorLog logs/domain1.com-error_log TransferLog logs/domain1.com-access_log RefererLog logs/domain1.com-referer_log AgentLog logs/domain1.com-agent_log # Utiliser les scripts CGI dans ce domaine ScriptAlias /cgi-bin/ /var/www/cgi-bin/domain1.com/ AddHandler cgi-script .cgi AddHandler cgi-script .pl </VirtualHost> <VirtualHost www.domain2.com> # E-mail à laquelle sont envoyées les erreurs ServerAdmin webmaster@domain2.com # Endroit où sont mis les documents du domaine virtuel DocumentRoot /virtual/domain2.com/var/www/html # Nom du Serveur ServerName www.domain2.com # Fichiers de Log relatifs à l'option ServerRoot ErrorLog logs/domain2.com-error_log TransferLog logs/domain2.com-access_log RefererLog logs/domain2.com-referer_log AgentLog logs/domain2.com-agent_log # Pas de script CGI pour ce domaine </VirtualHost> # Fin: Section de l'hebergement virtuel
Ce fichier de configuration est utilisé pour contrôler comment sont servies les demandes et comment sont formattés les résultats. Vous n'avez pas besoin d'éditer quoi que ce soit ici pour les domaines virtuels. Le fichier de configuration de base d'Apache doit fonctionner.
Rien de spécial n'est à faire dans ce fichier. Utilisez la version de base qui est fournie avec Apache.
Cela s'applique seulement à la version standalone du serveur Apache. Un serveur qui se lance au travers d'inetd n'intervient pas avec les autres domaines et à accès à toute la table des descripteurs de fichiers.
Chaque fichier de log qu'ouvre Apache est un autre descripteur de fichier pour le processus. Il y a une limite de 256 descripteurs de fichier par processus au coeur du systeme Linux. Depuis que vous avez plusieurs domaines, vous utilisez plus de descripteurs de fichiers. Si vous avez trop de domaines tournant sur un processus du serveur Apache, vous pouvez engorger cette table. Cela peut impliquer que certains logs ne fonctionneront pas et que certains CGI seront interrompus.
Si vous prévoyez cinq descripteurs de fichiers par domaine, vous pouvez avoir 50 domaines tournant sur votre serveur Apache sans problèmes. Mais, si votre serveur a des problèmes, vous pouvez créer /var/www1 avec un serveur Apache qui s'occupe des domaines 1 à 25 et /var/www2 avec un autre serveur qui s'occupe des domaines 26 à 50. Ainsi, chaque serveur aura son propre fichier de configuration, d'erreurs et de log. Chaque serveur doit être configuré separement avec ses propres directives de Listen et VirtualHost. Et n'oubliez pas de lancer plusieurs serveurs dans votre fichier httpd.ini.
La version 1.1 du protocole HTTP (HyperText Transfer Protocol) inclue une fonction qui communique le nom du serveur au client. Ce qui implique que le client n'a pas besoin de rechercher le nom du serveur à partir de son adresse IP. Comme ça, deux serveurs virtuels peuvent avoir la même adresse IP et être deux site Web différents. La configuration d'Apache est la même qu'avant, à part que vous n'avez pas besoin de mettre plusieurs directives Listen comme les deux domaines ont la même IP.
Le seul problème est que virtuald utilise les adresses IP pour distinguer les
domaines. Dans sa forme actuelle Virtuald ne serait pas capable de chroot
vers un répertoire de mail (spool) pour chaque domaine. Donc, les mails ne peuvent
etre reçus que sur une IP et il n'y aurait plus un répertoire spool pour chaque
domaine. Tous les clients d'un serveur web partageant une IP devront se partager
le meme repertoire spool. Ce qui signifierait que dupliquer les noms d'utilisateurs
serait encore une solution. Enfin, c'est le prix à payer pour économiser une IP.
Ce HOWTO montre seulement comment implémenter le support virtuel sur le serveur Web Apache. La plupart des serveur Web utilisent une interface similaire. Pour plus d'informations sur l'hébergement de web virtuel, consultez le WWW-HOWTO, la documentation d'Apache sur le Site d'Apache, ou la documentation sur ApacheWeek.