Héberger plusieurs sites sur un seul serveur apache
Aujourd’hui, je vous parle hébergement de site internet. Il m’arrive régulièrement d’avoir des petits sites à héberger (Gare ta car, WordPress de dev, …). Pour ces sites, j’ai des besoins spécifiques qui ne me permettent pas de les héberger sur un hébergement mutualisé. N’ayant que peu de moyen, j’ai un seul serveur WEB public hébergé sur un petit serveur de type VPS. Je vais donc vous expliquer ici comment héberger différents sites sur un seul et unique serveur WEB apache grâce aux VirtualHost.
Comment accède t’on à un site internet ?
Tout d’abord, commençons par étudier comment accède un navigateur à un site internet. Lorsque vous entrer l’adresse d’un site dans votre navigateur (ou lorsque vous cliquez sur un lien de votre moteur de recherche favori), votre navigateur va demander à votre serveur DNS (souvent celui de votre box) à quel adresse IP se trouve ce site. Cette requête correspond à l’exécution d’un nslookup www.site.fr
.
$ nslookup garetacar.eu Server: 192.168.1.1 Address: 192.168.1.1#53 Non-authoritative answer: Name: garetacar.eu Address: 149.202.51.171
Une fois que votre navigateur connaît l’adresse IP du serveur du site, il va le contacter sur le port que vous aurez spécifié. Le port 80 pour les adresses commençant par http://
, 443 pour les sites en https://
ou encore un autre port si l’url du site contient :
après le nom de domaine (le port 3615 pour http://www.exemple.fr:3615/index.html).
Ensuite votre navigateur va envoyer une requête HTTP GET au serveur WEB lui indiquant la page désirée et le site WEB que vous désirez voir s’afficher.
GET / HTTP/1.1 Host: garetacar.eu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0 Accept: */* Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate
C’est donc à partir de ces informations que votre serveur WEB va renvoyer la page correspondant à la requête. Comme vous pouvez le voir dans la requête nous avons une valeur Host, c’est celle-ci que nous utiliserons pour savoir quel site afficher.
Les VirtualHosts
Les VirtualHosts (VH) est un système permettant à partir d’une seule et unique IP de fournir plusieurs sites. Ces différents sites peuvent être servit sur des ports différents : 80 (HTTP), 443 (HTTPS) ou encore sur des noms de domaines différents.
J’ai l’habitude de créer un fichier de config apache par VH, cela me permet de les activer et désactiver à mon bon vouloir. Sous Debian, les fichiers de VirtualHosts sont à créer dans le répertoire /etc/apache2/sites-available/
sous un nom du style monsite.conf
. Le .conf
est important car sinon votre fichier n’est pas considéré comme un fichier de config.
<VirtualHost *:80> ServerName monsite.fr ServerAlias monsite.com ServerAdmin webmaster@monsite.fr DocumentRoot /var/www/monsite LogLevel info ErrorLog ${APACHE_LOG_DIR}/monsite_error.log CustomLog ${APACHE_LOG_DIR}/monsite_access.log combined </VirtualHost>
Le fichier ci-dessus dit au serveur que si une requête arrivant sur n’importe quel IP et sur le port 80 (l.1 *:80
) avec en valeur de Host: monsite.fr
ou monsite.com
(l.2-3) alors il lui faut servir les fichiers se trouvant dans /var/www/monsite
(l.6). Ensuite nous lui demandons de nous enregistrer les logs dans des fichiers spécifique au site et non dans les fichiers de log apache standard (l.7-10). Les lignes obligatoires sont les lignes surlignées, les autres ne permettant que d’ajouter des spécifications supplémentaires.
Maintenant que notre fichier de configuration est prêt, nous devons l’activer.
# a2ensite monsite.conf Enabling site parks. To activate the new configuration, you need to run: service apache2 reload # service apache2 reload
Voila votre premier VirtualHost est actif, vous pouvez en créer autant que vous le souhaitez dans les limites de capacité de votre serveur. N’hésitez pas à poster un commentaire si vous avez une question.
Sources: Documentation Apache
Commentaires
Yassine Jadid
Je crois que votre configuration est local, je peux pas excéder a mes pages web d’un autre machine dans le même réseau???
wilfried
salut je viens de lire de cet article très passionnent mais j’aimerai savoir si tout ceci est possible si mes site son héberger dans mon server que moi même j’ai crée . je possède une machine que je voudrai transformer en server abritant plusieurs sites merci
Anthony
Désolé du temps de réponse! Si vous avez spécifié
<VirtualHost *:80>
, le serveur acceptera les requêtes venant de toutes adresses IP accessibles si elle ne sont pas bloquées par iptables.Anthony
Bonjour, bien-sur finalement un serveur n’est qu’un ordinateur sur lequel tourne un service (ici Apache) qui répond a des requêtes. Par contre si vous souhaitez que vos sites soient accessibles sur internet il faut que votre serveur / ordinateur / machine ai une adresse IP publique.
Guihir
Est ce possible d’avoir plusieurs VirtualHosts avec un forfait mutualisé ?
franck
bonjour
est il possible d’avoir les deux sites actifs ?
ou est ce une activation de l’un ou de l’autre site uniquement ?
merci
Anthony
Il est possible d’avoir les 2 ou plus sites activités
Anthony
Je ne comprends pas ce que vous appelez forfait mutualisé. Cette solution fonctionne si vous avez le contrôle du serveur.
Martin
Bonjour,
Je viens de lire votre article. Lorsque j’essaie de faire la manipulation, mon second site me redirige vers une page erreur :
Forbidden
You don’t have permission to access this resource.
Savez vous pourquoi?
Merci 🙂
HAMDAOUI Hassane
Bonjour,
Merci pour ce magnifique tuto. Comment configure t’on apache si on a un site par vm et qu’on souhaite les héberger dernière une seule ip public.
Merci par avance
Philippe
Bonjour,
Merci pour les explications. Même question qu’Hassane. J’héberge 3 sites sur une seule adresse IP, mais ne je parviens pas à configurer. Est-ce du au fait que mes 3 sites sont en VM sur ma Box ?