<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  <html>  <head> <link href="/styles/sottises.css" rel="stylesheet" type="text/css"> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <meta http-equiv="Content-Script-Type" content="text/javascript">  <script type="text/javascript"> <!-- function graph_text() {         return;         }  function addtxt(smiley) {         var smiley;         var newmsg;         var lastmsg = document.newpost.msg.value;         newmessage = lastmsg+smiley;         document.newpost.msg.value=newmessage;         document.newpost.msg.focus();         return;         } //--> </script>   <title> Serveurs virtuels apache</title> </head>   <body> &nbsp; <script  type="text/javascript" language="Javascript" src="/nbconnectes.php?action=hide"></Script> <table border="0" width="100%" cellpadding="0" cellspacing="0"> 	<tr>   	<td align="left" valign="bottom"> 	<img src="/images/logo.jpg" alt="logo" border="0" width="120" height="144"> 	</td> 	<td align="center" valign="bottom"> 	<img src="/images/banniere.jpg" alt="banniere" border="0" width="819" height="130"> 	</td> 	</tr> 	<tr><td width="120"></td> 	<td align="center"> 	<h1> 	S'il n'y a pas de solution c'est qu'il n'y a pas de problme! 	</h1> 	</td> 	</tr> </table> <table border="0" width="100%" cellpadding="0" cellspacing="0"> 	<tr><td width="120"></td> 	<td align="center"> 	<h1> 	<br> 	Serveurs virtuels apache	</h1> 	<br> 	</td></tr> </table>  	 <table border="0" width="99%" cellpadding="8" cellspacing="5">	 <tr> <td valign="top" align="left"> <form action="print.php" method="post" target="_blank"> <input type="hidden" name="print" value="texts/serveurs_virtuels_txt.php"> <input type="hidden" name="title" value="Serveurs virtuels apache"> <input type="submit" value="Version Imprimable"> </form> </td>  <td valign="top" align="right"> <form method="get" action="/cgi-bin/htsearch" target="_blank"> <input type="hidden" name="method" value="and"> <input type="hidden" name="format" value="builtin-long"> <input type="hidden" name="sort" value="score"> <input type=hidden name=config value=htdig> <input type=hidden name=restrict value=""> <input type=hidden name=exclude value=""> <input type="submit" value="Chercher"> <input type="text" size="30" name="words" value=""> </form> </td> </tr>  <tr> <td valign="top" width="180"> 		<table border="1" width="180" class="cadre" cellpadding ="5"> 	<tr> 	<td class="menu"> 	<center><b><u>Rubriques</u></b></center> 	<br> 		<b>Linux-Sotises</b><br> 		&nbsp;<a href="/">Accueil</a><br> 		&nbsp;<a href="/mailing-list/subscribe.php" target="_blank">Mailing List</a><br> 		&nbsp;<a href="/lettres_information.php">Anciens mailings</a><br> 		&nbsp;<a href="/historique.php">Historique</a><br> 		&nbsp;<a href="/apple.php">Ma pomme triste</a><br> 		&nbsp;<a href="http://math.linux-sottises.net" target="_blank">Cours de math</a><br> 		&nbsp;<a href="/liens.php">Liens</a> 		<br><br> 		<b>Statistiques</b><br> 		&nbsp;<a href="/stats_mrtg.php">Stats Mrtg (arrtes)</a><br> 		&nbsp;<a href="/stats_mrtnk.php">Stats Mrtnk</a><br> 		&nbsp;<a href="/rmagic/GENERAL.php">Stats Report Magic</a><br> 		&nbsp;<a href="/mgstat/index.php">Stats Mod_gzip Mgstat</a><br> 		&nbsp;<a href="/nbconnectes.php?action=admin" 		onClick="window.open('/nbconnectes.php?action=admin', 		'','scrollbars=no,status=no,width=300,height=250,screenX=100,screenY=100'); 		return false;">Record de frquentation</a><br> 		&nbsp;<a href="/phpSysInfo/index.php?lng=fr">Infos Systme</a> 		<br><br> 		<b>Dtente</b><br> 		&nbsp;<a href="/proverbes.php">Proverbes</a><br> 		&nbsp;<a href="/math.php">Sottises mathmatiques</a><br> 		&nbsp;<a href="/bestof.php">Bestof</a> 		<br><br> 		<b>Software</b><br> 		&nbsp;<a href="/software.php#board-tnk">Board-tnk</a> <font color="red">English</font><br> 		&nbsp;<a href="/software.php#news-tnk">News-tnk</a> <font color="red">English</font><br> 		&nbsp;<a href="/software.php#mrtnk">Mrtnk</a> <font color="red">English</font><br> 		&nbsp;<a href="/bugs.php">Bugs</a> <font color="red">English</font> 		<br><br> 		<b>ADSL</b><br> 		&nbsp;<a href="/adsl_sous_linux.php">Adsl pptp</a><br> 		&nbsp;<a href="/speedtouch-usb.php">Adsl Speedtouch usb</a> 		<br><br> 		<b>Scurit</b><br> 		&nbsp;<a href="/vpn.php">VPN</a><br> 		&nbsp;<a href="/partage_et_parefeu.php">Filtrage (ipchains)</a><br> 		&nbsp;<a href="/iptables.php">Filtrage (iptables)</a> 		<br><br> 		<b>DNS</b><br> 		&nbsp;<a href="/bind.php">Bind</a><br> 		&nbsp;<a href="/en_bind.php">Bind</a> <font color="red">English</font> 		<br><br> 		<b>Masquerade</b><br> 		&nbsp;<a href="/themasq.php">Masq et H323</a><br> 		&nbsp;<a href="/en_themasq.php">Masq and H323</a> <font color="red">English</font> 		<br><br> 		<b>Apache</b><br> 		&nbsp;<a href="/apache_install.php">SSL - PHP - Perl</a><br> 		&nbsp;<a href="/en_apache_install.php">SSL - PHP - Perl</a> <font color="red">English</font><br> 		&nbsp;<a href="/serveurs_virtuels.php">Serveurs virtuels</a> 		<br><br> 		<b>MRTG</b><br> 		&nbsp;<a href="/mrtg.php">Installation/scripts</a><br> 		&nbsp;<a href="/en_mrtg.php">Install/scripts</a> <font color="red">English</font> 		<br><br> 		<b>Discussions</b><br> 		&nbsp;<a href="/board/board.php">Forum</a><br> 		&nbsp;<a href="/avis.php?read">Votre Avis</a> 	</td>	 	</tr> 	</table> 	 	<br>  	 	          </td>  <td valign="top"> <b>Introduction</b> <p> Lors de la mise en place de ce serveur, je me suis trouv face au problme d'hberger plusieurs serveurs web avec Apache (plusieurs noms de domaine pointant vers mon IP). <br> Et comme,  cette poque cette machine (les puristes diront "l'interface connecte  internet") avait une adresse IP variable (et que a cote aujourd'hui une fortune d'avoir une adresse fixe, sauf par Nerim qui n'est pas disponible o j'habite, damned!, correction! c'est du pass, Linux-sottises est depuis pass chez Nerim!!), et bien il a bien fallu "faire quelque chose". C'est l'objet de cette page. <br> On trouve assez vite la solution des serveurs virtuels, mais aprs plusieurs tentatives, il m'a sembl qu'il tait impossible de faire des serveurs virtuels sans faire figurer l'adresse IP de la machine dans le fichier de conf d'apache <code>httpd.conf</code> avec une version d'apache infrieure ou gale  1.3.12. Grce  <a href="mailto:Regis.LEMAIRE@9telecom.fr">Regis Lemaire</a> qui m'a aimablement fourni l'information, cela devient possible avec les versions d'apache suprieure ou gale  1.3.13. Les deux solutions sont exposes ici...mais un conseil: utilisez une version d'apache 1.3.13 ou plus, c'est quand mme plus simple!!!   <p><b>Configuration des serveurs virtuels apache 1.3.13 ou plus</b>  <p> Un fichier exemple vaut mieux que de longs discours. Ci dessous, vous trouverez la partie "serveurs virtuels" du fichier <code>httpd.conf</code>. Il y a pour commencer l'accs  un serveur local par son ip local, puis 3 serveurs virtuels. J'ai spar les logs des sites, le fichier d'erreur est partag par tous les serveurs et est dclar dans le "serveur principal".  <center> <table border="1" cellspacing="0" cellpadding="4" class="code"> <tr><td> <pre> NameVirtualHost 192.168.1.1  &lt;VirtualHost 192.168.1.1&gt;     DocumentRoot /web     ServerName yoda     CustomLog /var/log/httpd/yoda-access_log common &lt;/VirtualHost&gt;   NameVirtualHost *  &lt;VirtualHost *&gt;     DocumentRoot /web     ServerName linux-sottises.homeip.net &lt;/VirtualHost&gt;  &lt;VirtualHost *&gt;     DocumentRoot /home/matthieu/WWW     ServerName matgob.homeip.net     CustomLog /var/log/httpd/matgob-access_log common &lt;/VirtualHost&gt;  &lt;VirtualHost *&gt;     DocumentRoot /web/cheztoutou     ServerName cheztoutou.homeip.net     CustomLog /var/log/httpd/cheztoutou-access_log common &lt;/VirtualHost&gt; </pre> </td></tr> </table> </center>  <p><b>Configuration des serveurs virtuels apache 1.3.x</b>  <p> Le problme est que vous devez faire figurer le numro d'ip (dynamique)  l'interieur du fichier <code>httpd.conf</code> et qu'il est ncessaire d'avoir le numro ip des serveurs virtuels dans <code>/etc/hosts</code>. Je commence par dcrire une procdure pas trs "lgante" mais efficace, puis j'indiquerai  la fin l'ide fournie par <a href="mailto:Regis.LEMAIRE@9telecom.fr">Regis Lemaire</a> qui utilise <code>sed</code> pour faire les manipulations de texte, ce qui est beaucoup plus lgant (un poil plus long).  <p> Vous tes suppos avoir dj un serveur apache qui fonctionne correctement, en local, ou dj sur un nom de domaine. <br> La "mthode" (c'est un bien grand mot...) employe consiste  reconfigurer les fichiers <code>/etc/hosts</code> et <code>/etc/httpd/httpd.conf</code> quand l'IP change lors d'une reconnexion (si le fichier de configuration d'apache n'est pas dans <code>/etc/httpd</code>, vous devriez savoir o il est, non?) <br> On commence par fabriquer deux fichiers <code>httpd.conf.trame1</code> et <code>httpd.conf.trame2</code> dans le rpertoire o est <code>httpd.conf</code>. <br> <code>httpd.conf.trame1</code> contient <i>tout</i> le fichier <code>httpd.conf</code> sauf la partie qui concerne les serveurs virtuels et <code>httpd.conf.trame2</code> contient la partie dcrivant les serveurs virtuels. <br> A titre d'exemple, voici mon fichier <code>httpd.conf.trame2</code>:  <center> <table border="1" cellspacing="0" cellpadding="4" class="code"> <tr><td> <pre> &lt;VirtualHost 192.168.1.1&gt;     DocumentRoot /web     ServerName yoda     CustomLog /var/log/httpd/yoda-access_log common &lt;/VirtualHost&gt;  &lt;VirtualHost linux-sottises.homeip.net&gt;     DocumentRoot /web     ServerName linux-sottises.homeip.net &lt;/VirtualHost&gt;  &lt;VirtualHost matgob.homeip.net&gt;     DocumentRoot /home/matthieu/WWW     ServerName matgob.homeip.net     CustomLog /var/log/httpd/matgob-access_log common &lt;/VirtualHost&gt;  &lt;VirtualHost cheztoutou.homeip.net&gt;     DocumentRoot /web/cheztoutou     ServerName cheztoutou.homeip.net     CustomLog /var/log/httpd/cheztoutou-access_log common &lt;/VirtualHost&gt; </pre> </td></tr> </table> </center>  <p> Quelques commentaires sur cet exemple. Le premier serveur virtuel est le serveur "local" (<code>192.168.1.1</code> est l'adresse de la machine sur le rseau local). Cela permet d'accder aux pages du serveur principal sans "sortir" du rseau local. <br> Les autres serveurs virtuels sont "nomms" et leur adresse sera recherche dans <code>/etc/hosts</code>. L'ordre <code>DocumentRoot</code> indique l'emplacement des fichiers du serveur, <code>CustomLog</code> me permet d'avoir des logs diffrentis suivant les serveurs accds. (Je n'ai qu'un seul fichier de log d'erreurs qui est dclar dans le fichier <code>httpd.conf</code> et donc aussi dans <code>httpd.conf.trame1</code>.  <p> Ensuite, crez un fichier <code>/etc/hosts.trame</code> qui est la copie de <code>/etc/hosts</code> sans la partie qui concerne les noms de vos serveurs apache (en fait tout ce qui est fixe dans votre <code>/etc/hosts</code>. Le mien contient:  <center> <table border="1" cellspacing="0" cellpadding="4" class="code"> <tr><td> <pre> 127.0.0.1  localhost 192.168.1.2  leia 192.168.1.3  skywalker 192.168.1.4  gobelin 192.168.1.5  garfield 10.0.0.138      alcatel 193.252.19.3   dns1 193.252.19.3  dns2 193.252.96.3    netissimo 192.168.1.1      yoda.linux-sottises.homeip.net   yoda 10.0.0.1         yoda.linux-sottises.homeip.net </pre> </td></tr> </table> </center>  <p> Maintenant, tout est prt pour excuter un script <code>relance_apache</code> qui va fabriquer les "bons <code>httpd.conf</code> et <code>/etc/hosts</code> et qui relancera apache. Quelques explications sur ce script:  <center> <table border="1" cellspacing="0" cellpadding="4" class="code"> <tr><td> <pre>  #! /bin/sh  LOG=/var/log/adsl HOSTS=/etc/hosts HOSTS_TRAME=/etc/hosts.trame HOSTS_TEMP=/etc/hosts.temp APACHE=/etc/httpd/httpd.conf APACHE1=/etc/httpd/httpd.conf.trame1 APACHE2=/etc/httpd/httpd.conf.trame2 APACHE_TEMP=/etc/httpd/httpd.conf.temp  echo starting relance_apache >> $LOG  IP=`cat /usr/local/adsl/pptp.ip`  cp $HOSTS_TRAME $HOSTS_TEMP echo $IP linux-sottises.homeip.net >> $HOSTS_TEMP echo $IP cheztoutou.homeip.net >> $HOSTS_TEMP echo $IP matgob.homeip.net >> $HOSTS_TEMP cp $HOSTS_TEMP $HOSTS rm $HOSTS_TEMP  cp $APACHE1 $APACHE_TEMP echo NameVirtualHost $IP >> $APACHE_TEMP cat $APACHE2 >> $APACHE_TEMP cp $APACHE_TEMP $APACHE rm $APACHE_TEMP  /usr/sbin/rcapache restart >> $LOG </pre> </td></tr> </table> </center>  <p> Tout d'abord, je loggue le redmarrage d'apache au mme endroit que les messages de connexion adsl, changez la variable LOG si vous le souhaitez. <br> Les variables <code>APACHE*</code> et <code>HOSTS*</code> donnent l'emplacement des fichiers. Modifiez les pour votre configuration. <br> le fichier <code>/usr/local/adsl/pptp.ip</code> contient chez moi l'IP public de la machine ( jour au moment o je lance ce script). C'est le script <code>uddns</code> qui remplit ce fichier (voir page <a href="adsl_sous_linux.php">adsl</a>). Si vous n'utilisez pas uddns, remplacez la ligne:  <center> <table border="1" cellspacing="0" cellpadding="4" class="code"> <tr><td> <pre> IP=`cat /usr/local/adsl/pptp.ip` </pre> </td></tr> </table> </center>  <p> par  <center> <table border="1" cellspacing="0" cellpadding="4" class="code"> <tr><td> <pre> IP=`/sbin/ifconfig ppp0 | fgrep "inet ad" | cut -f2 -d":" | cut -f1 -d" "` </pre> </td></tr> </table> </center>  <p> en vrifiant l'emplacement de <code>ifconfig</code> (vous pouvez aussi "unifier" les scripts avec ceux proposs sur la page adsl, mais je prfre proposer des scripts  peu prs autonomes pour ne pas forcer mes aimables visiteurs  se taper tous mes scripts pour en faire fonctionner un seul...c'est un choix)  <p> Le script fabrique ensuite le fichier <code>hosts</code> en lui rajoutant les lignes qui correspondent  vos noms de domaine (mettez les votres!!), puis le fichier <code>httpd.conf</code> en insrant l'ordre <code>NameVirtualHost "numro d'ip"</code>  la suite du <code>httpd.conf.trame1</code>, puis le fichier <code>httpd.conf.trame2</code> encore  la suite. <br> Vient ensuite l'ordre de redmarrage d'apache (l sous suse, adaptez le  votre distribution)  <p> Vous n'avez plus qu' stocker ce script  un endroit qui vous convient, et lancez le script  la fin de votre procdure de reconnexion en cas de changement d'IP. Chez moi, c'est <code>uddns</code> qui lance <code>relance_apache</code> quand l'IP a chang.  <p><b>Mise  jour de httpd.conf avec sed</b>  <p> <a href="mailto:Regis.LEMAIRE at 9telecom.fr">Regis Lemaire</a> a propos la solution alternative suivante pour mettre  jour le fichier <code>httpd.conf</code>. <br> Fabriquez un fichier modle <code>httpd.modele</code> dans lequel il y a IPDYNAMIC  la place de l'ip dans la ligne NameVirtualHost. <br> Dans un script, la mise  jour du fichier <code>httpd.conf</code> se fait par l'ordre:  <center> <table border="1" cellspacing="0" cellpadding="4" class="code"> <tr><td> <pre> sed "s/IPDYNAMIC/$IP/" $HTTPD_MODELE > HTTPD_CONF </pre> </td></tr> </table> </center>  <p> o $IP est le numro IP, $HTTPD_MODELE le chemin du fichier <code>httpd.modele</code> et HTTPD_CONF le chemin de <code>httpd.conf</code>. L'ordre sed va remplacer IPDYNAMIC par la valeur de l'IP et copier le fichier obtenu dans le fichier de configuration d'apache. <br> Vous pouvez vous en inspirer pour mettre  jour <code>/etc/hosts</code>.</td>  </tr> </table>  <hr>  	<font size="-2"> 	Dernire modification le jeudi 17 avril 2003  00:40:46 Paris	<br> 	Webmaster: <a href="mailto:tnka at linux-sottises.net">TNK</a> 	</font>  	 <table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td align="center">  <a href="http://validator.w3.org/check/referer" target="_blank"> <img alt="Valid HTML 4.01!" border="0" height="31" src="/images/valid-html401.png" width="88"></a>  <a href="http://jigsaw.w3.org/css-validator/check/referer" target="_blank"> <img alt="Valid CSS!" border="0" height="31" src="/images/vcss.gif" width="88"></a>  <a href="http://quanta.sourceforge.net" target="_blank"> <img src="../images/quanta.png" width=102 height=62 border=0 alt="quanta"></a>  <a href="http://www.hertgen.com/anybrowser/" target="blank"> <img src="/images/anybrowser.gif" width="88" height="31" border="0" alt="anybrowser"></a>  <a href="http://www.suse.de/en" target="_blank"> <img src="/images/powered_suse.gif" width="88" height="31" border="0" alt="suse"></a>  <a href="http://www.netcraft.com/whats?host=www.linux-sottises.net" target="_blank"> <img src="/images/powered.gif" alt="powered by" width=58 height=34 border=0></a>  <br><br>  <a href="http://www.linux.org" target="_blank"> <img src="/images/powered_linux.gif" width="102" height="47" border="0" alt="linux"></a>  <a href="http://www.apache.org" target="_blank"> <img src="/images/powered_apache.gif" width="102" height="47" border="0" alt="apache"></a>  <a href="http://sourceforge.net/projects/mod-gzip" target="_blank"> <img src="/images/mod_gzip_logo.gif" border=0 width="102" height="47" alt="mod_gzip"></a>  <a href="http://www.php.net" target="_blank"> <img src="/images/powered_php.gif" width="102" height="47" border="0" alt="php"></a>  <a href="http://www.mysql.com" target="blank"> <img src="/images/powered_mysql.gif" width="102" height="47" border="0" alt="mysql"></a>  <a href="http://www.openssl.org" target="_blank"> <img src="/images/powered_openssl.gif" width="102" height="47" border="0" alt="openssl"></a>  <a href="http://www.modssl.org" target="_blank"> <img src="/images/powered_modssl.gif" width="102" height="47" border="0" alt="modssl"></a>  </td>  </tr> </table>  <img src="/cgi-bin/Count.cgi?df=adsl.dat&amp;sh=F" alt=""> <br><br>  </body> </html> 
