Comment configurer apache pour l' hébergement d'hotes virtuels.

../

préambule:
la lecture de cette doc, implique de connaitre un tant soit peu la configuration d'apache, et de comprendre la notion d' hébergement "multiples".
Je ne rentre pas dans le "rewrite", ni dans le "mod_vhost_alias".




Il n' y a apparemment que deux manières d'héberger des hotes virtuels, soit sur le critère du nom DNS, soit sur celui de l'adresse IP.
Je ne le ferais que par le nom DNS, étant donné que je ne dispose que d'une seul adresse IP publique, mais que sur celle-ci peuvent pointer différents noms DNS.
Dans l'hebergement virtuel par nom, j'aurais besoin d'indiquer la directive "NameVirtualHost" celle-ci indique a apache que le critère d'accès au site ce fait par le nom DNS de celui-ci, nom figurant dans la requète du client.
Apparemment seul les clients utilisant HTTP1.1 peuvent acceder a ce genre d'hebergement (HTTP1.1 produit un en-tete "Host", celui ci est neccessaire...mais je n'en sais pas plus :-))



- j'utilise la DEBIAN SARGE comme plateforme.
- Aucun module "particulier" n'a besoin d'etre chargé.

Voici le contenu du répertoire /etc/apache2/:

total 41
-rw-r--r-- 1 root root 12462 2002-01-04 11:59 apache2.conf
drwxr-xr-x 2 root root 1024 2002-01-04 11:55 conf.d
-rw-r--r-- 1 root root 713 2004-11-10 12:42 envvars
-rw-r--r-- 1 root root 302 2002-01-04 11:56 httpd.conf
-rw-r--r-- 1 root root 12441 2004-11-10 13:00 magic
drwxr-xr-x 2 root root 2048 2002-01-11 08:30 mods-available
drwxr-xr-x 2 root root 1024 2002-01-11 08:35 mods-enabled
-rw-r--r-- 1 root root 10 2002-01-03 01:53 ports.conf
-rw-r--r-- 1 root root 2266 2004-11-10 13:00 README
drwxr-xr-x 2 root root 1024 2002-01-12 02:11 sites-available
drwxr-xr-x 2 root root 1024 2002-01-12 02:14 sites-enabled
drwxr-xr-x 2 root root 1024 2004-11-10 13:00 ssl

- le répertoire "sites-available", contient les fichiers de configurations des sites disponibles, par défaut, seul le fichier "default" est présent.

- le répertoire "sites-enabled" contient des liens symbolique vers le répertoire "sites-available", pour activer un site il faut juste créer un liens dans ce répertoire.

En plus du site par défaut, j'ai donc créer un site nommé "virtual" dans sites-available, et l'ai activé en créant le liens dans sites-enabled ex:

# cd /etc/apache2/sites-enabled
# ln -s /etc/apache2/sites-available/virtual virtual

Voici maintenant le contenu des deux répertoires

sites-available:
-rw-r--r-- 1 root root 1781 2002-01-12 02:14 default
-rw-r--r-- 1 root root 446 2002-01-12 02:11 virtual

sites-enabled:
lrwxrwxrwx 1 root root 36 2002-01-03 01:53 000-default -> /etc/apache2/sites-available/default
lrwxrwxrwx 1 root root 36 2002-01-12 02:11 virtual -> /etc/apache2/sites-available/virtual



FICHIER DEFAULT


Voici le contenu du fichier "default" (qui apparemment était deja un virtualhost mais par adresse IP), Je lui ai rajouter la directive "NameVirtualHost" et j'ai fixé la directive "ServerName" a "verseau.athena.home".
Les requètes des clients web, appellant le serveur "verseau.athena.home" subissent les directives de la configuration ci-dessous: DocumentRoot etc..


NameVirtualHost *
<VirtualHost *>
	ServerAdmin webmaster@localhost
	ServerName verseau.athena.home
	DocumentRoot /var/www/
	
	<Directory />
		Options FollowSymLinks
		AllowOverride None
	</Directory>
	<Directory /var/www/>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
		# This directive allows us to have apache2's default start page
                # in /apache2-default/, but still have / go to the right place
		RedirectMatch ^/$ /verseau/
	</Directory>
	<Directory /var/www/verseau>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride All
		Order allow,deny
		allow from all
	</Directory>

	<Directory /var/www/dotclear>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride All
		Order allow,deny
		allow from all
	</Directory>
	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
	<Directory "/usr/lib/cgi-bin">
		AllowOverride None
		Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
		Order allow,deny
		Allow from all
	</Directory>

	ErrorLog /var/log/apache2/error.log

	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn

	CustomLog /var/log/apache2/access.log combined
	ServerSignature On
	
	Alias /icons/ "/usr/share/apache2/icons/"
	<Directory "/usr/share/apache2/icons">
	    Options Indexes MultiViews
	    AllowOverride None
	    Order allow,deny
	    Allow from all
	</Directory>

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 192.168.0.0/24
    </Directory>

</VirtualHost>



FICHIER VIRTUAL


Voici le contenu du fichier "virtual" (je ne rajoute pas de directive "NameVirtualHost" celle ci etant deja présente dans le site "default").
Le "ServerName" est ici "virtual.athena.home", qui correspond a un enregistrement DNS de type CNAME (alias) pointant vers le nom "officiel" du serveur (verseau.athena.home).

<VirtualHost *>
	ServerAdmin webmaster@localhost
	ServerName virtual.athena.home
	DocumentRoot /var/www/test/
	<Directory /var/www/test>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
	</Directory>
</VirtualHost>



- L'étoile de la directive "NameVirtualHost *" indique au serveur d'ecouter les requetes sur toutes les adresses IP du serveur.

- Pareil pour la balise <VirtualHost *>



LE PIEGE


- Il faut bien sur taper le nom DNS pleinement qualifié dans le navigateur web s'y il a été ainsi renseigner dans la directive ServerName du virtualhost.
En gros si moi je tape "http://virtual" dans mon navigateur internet, le DNS me fera pointé vers l'adresse par défaut de mon serveur web, alors que si je tape "http:// virtual.athena.home", le serveur apache saura que cela concerne le virtualhost "virtual.athena.home", donc il faut une correspondance précise entre "servername" et enregistrement DNS.

Les images valent plus que les mots:

PAS BIEN



BIEN






La configuration mise en place peut etre tester avec la commande "apache2 -S"
voici son résultat:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:*                    is a NameVirtualHost
         default server verseau.athena.home (/etc/apache2/sites-enabled/000-default:2)
         port * namevhost verseau.athena.home (/etc/apache2/sites-enabled/000-default:2)
         port * namevhost virtual.athena.home (/etc/apache2/sites-enabled/virtual:3)
Syntax OK




Pour info voici le contenu de la zone DNS "athena.home.zone"

$TTL 2D
athena.home.	                	IN SOA		verseau.athena.home.   root.localhost. (
			        	1999092901	; serial
			        	1D		; refresh
			        	2H		; retry
			        	1W		; expiry
			        	2D )		; minimum

athena.home.                        	IN NS		verseau.athena.home.
athena.home.                            IN MX		10 verseau.athena.home.

akira           	        	IN A		192.168.0.4
verseau	                        	IN A		192.168.0.3
bling	                        	IN A		192.168.0.2
athena	                        	IN A		192.168.0.1

pop.athena.home.	        	IN CNAME	verseau.athena.home.
imap.athena.home.	        	IN CNAME	verseau.athena.home.
smtp.athena.home.	        	IN CNAME	verseau.athena.home.
www.athena.home.                        IN CNAME        verseau.athena.home.   
virtual                                 IN CNAME        verseau.athena.home.