Créer son premier Virtual Host sous Ubuntu

Posté le Mardi 26 avril 2016 - 12:39
Dernière mise à jour le Mardi 9 juillet 2019 - 09:52
Créer son premier Virtual Host sous Ubuntu

Second billet destiné aux débutants du développement web sous Ubuntu. SI vous avez raté le premier épisode, je vous encourage à lire Bien commencer le développement PHP sous Ubuntu.

Aujourd'hui nous allons voir comment créer des virtual hosts Apache 2.

Mise à jour du 09 juillet 2019 : remplacement du domaine en .dev par un domaine en .test, car il est maintenant recommandé de ne plus utiliser .dev en guise d'extension locale, ce TLD ayant été acheté par google.

Qu'est-ce qu'un virtual host ?

C'est simplement un fichier de configuration d'apache 2 qui lui dira que s'il reçoit une requête d'un domaine donné (par exemple : www.monsite.test) il devra utiliser un dossier précis, avec une configuration particulière.

En plus d'avoir une url plus propre que http://localhost/monsite.com, un vhost vous permettra d'activer des configurations avancées, souvent nécessaire lors de l'installation d'un symfony 2 par exemple.

Faire pointer notre domaine

La première étape est de dire à notre machine que le domaine monsite.com doit pointer sur notre propre machine (c'est à dire 127.0.0.1) pour cela, deux possibilités, soit vous modifier votre fichier hosts, soit vous redirigez automatiquement tous les domaines en .dev vers votre machine.

Modification du fichier hosts

sudo gedit /etc/hosts

et ajoutez à la fin du fichier :

127.0.0.1 monsite.test www.monsite.test

Redirection d'un domaine de niveau 1 (TLD) vers la machine local

Pour rediriger tous les domaines en .test automatiquement sur votre machine, je vous encourage à lire ce post : Rediriger automatiquement un tld sur sa machine sans toucher au fichier hosts.

Vérifions que notre configuration soit bien prise en compte, dans un terminal lançons la commande

ping monsite.test

Ici alors en boucle nous allons demander à notre machine de "résoudre" le domaine monsite.test, c'est à dire de trouver son adresse ip associée. (faites ctrl+c pour interrompre la commande)

ping-site-local.png

Si le ping nous renvoie 127.0.0.1, c'est gagné, nous pouvons maintenant passer à la configuration d'Apache et du virtual host.

Organisation des fichiers

Nous allons commencer par créer le dossier qui contiendra tous nos sources de sites. Vous pouvez très bien créer des sous-dossiers dans /var/www/html, mais cela pourrait porter à confusion. Dans cet exemple nous allons utiliser le dossier de base /var/vhosts, mais libre à vous d'en utiliser un autre (personnellement, j'utilise pour des raisons historiques /media/vhosts, ce qui n'est pas vraiment logique...)

Créons ce dossier à l'aide de la commande mkdir (votre mot de passe vous sera demandé car nous exécutons cette commande avec sudo)

sudo mkdir /var/vhosts

Maintenant, afin de ne plus avoir à utiliser sudo lorsque nous créerons un fichier dans ce dossier, rendons-nous en propriétaire avec la commande chown, toujours en tant que super user, et toujours en replaçant kgaut par votre nom de compte sous ubuntu :

sudo chown kgaut:www-data /var/vhosts -R

Vous pourrez maintenant vous déplacer dans ce dossier via l'explorateur de fichier et créer le dossier monsite.come qui contiendra les sources de notre futur site :

2016-04-26-145614-screenshot.png

Ce dossier contiendra les sources de notre site, mais aussi les journaux (logs) d'erreurs d'apache, les exports de base de données. Nous allons donc avoir l'architecture suivante :

/var/vhosts/
    monsite.com/
        db/ => export de base de données
        logs/ => logs apache2
        web/ => sources du site (document root)

Crééons donc ces dossiers :

2016-04-26-150037-screenshot.png

Dans le dossier web créez un fichier index.php avec le contenu suivant :

<?php 
echo 'salut le monde';

Cela nous permettra de tester notre virtual host.

fichier-test-vhost.png

Configuration du virtual host

Comme dit plus haut, un virtual host est simplement un fichier de config qui sera traité par apache.

Les virtuals hosts d'apache sont situé dans le dossier /etc/apache2/sites-available/ et ils doivent automatiquement avoir l'extension .conf.

Ma recommandation au niveau de la syntaxe des noms de fichier : domaine.extension.conf exemple dans notre cas  : monsite.dev.conf.

Lançons gedit pour créer ce fichier :

sudo gedit /etc/apache2/sites-available/monsite.test.conf

Dans l’éditeur rentrez la configuration suivante :

<VirtualHost *:80>
        #nom de domaine
	ServerName monsite.test 
        #on accepte aussi le www
	ServerAlias www.monsite.test 
        #logs d'erreur
	ErrorLog /var/vhosts/monsite.com/logs/error.log 
        #logs de connexion
	CustomLog /var/vhosts/monsite.com/logs/access.log common
        #Définition de la racine des sources php
	DocumentRoot "/var/vhosts/monsite.com/web/"
	<directory /var/vhosts/monsite.com/web/>
		Options -Indexes +FollowSymLinks +MultiViews
		AllowOverride All
		Require all granted
	</Directory>
</VirtualHost>

Enregistrez et quittez gedit : voila nous avons créé notre virtual host ! maintenant il faut l'activer :

sudo a2ensite monsite.test.conf

activation_dun_vhost.png

Comme la commande nous l'indique, afin que notre virtual host soit pris en compte il faut redémarrer apache, pour cela :

sudo service apache2 restart

Si vous avez un retour du style "Job for apache2.service failed because the control process exited with error code..." n'allez pas plus loin vous avez un problème dans votre fichier, re-modifiez-le et vérifiez les chemins, c'est principalement là que l'on fait des erreurs.

Si vous n'avez pas d'erreur, ouvrez un navigateur et faite le pointer sur http://www.monsite.dev. Si vous avez le résultat qui suit, c'est gagné, vous avez créé votre premier virtual host !

2016-04-26-152646-screenshot.png

 

Comments

Jean-Luc

Posté le Jeudi 27 juillet 2017 - 18:36

Bonjour Kevin,
Merci pour ce tuto très clair.
quand je redémarre le serveur apache, j'ai un message "AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message"
Que signifie-t-il ? comment ne pas avoir ce message ?
Merci !
Jean-Luc

Posté le Vendredi 12 juillet 2019 - 00:24

Bonsoir,
Réponse très tardive mais il semble que tu as écris 127.0.1.1 au lieu de 127.0.0.1.

Isabelle

Posté le Dimanche 13 août 2017 - 14:39

Bonjour,

Merci pour ce super tuto!

Travailler dans /var/www/html devient alors inutile?!
Est-ce vous créer des alias /home/user/www?

Cordialement,
Isabelle

kgaut

En réponse à par Isabelle

Posté le Lundi 14 août 2017 - 06:40

Travailler dans /var/www/html devient alors inutile?!

Effectivement, je ne travaille plus que dans le dossier /var/vhosts/ avec un virtual host pour chaque site.

J'ai parcontre un dossier /var/vhosts/www qui correspond au "localhost" (virtualhost par défault) pour les moment où j'ai juste besoin d'executer un petit script sans forcément créer un virtualhost.

Est-ce vous créer des alias /home/user/www?

Non, je n'utilise pas de lien depuis mon home vers mon dossier de vhost, j'ai par contre un raccourci dans mon explorateur de fichier (nautilus) qui me mène directement vers ce dossier.

GrUmLee

Posté le Mardi 12 septembre 2017 - 11:36

Merci beaucoup pour ce tutoriel, j'ai passé des heures pour faire marcher mon virutal host sous debian...
Jusqu'à ce que je tombe sur votre tutoriel et là ca fonctionne parfaitement!
Merci !!

Philo58

Posté le Mercredi 13 septembre 2017 - 23:10

Merci pour ce tuto très bien fait.

Je ne rencontre aucune erreur. Par contre, http://www.monsite.dev m'affiche une page qui ressemble à du FTP et qui n'est autre que le contenu de /var/www/html

Je suis tout débutant sur Linux. Je suppose qu'il y a quelque part quelque chose qui empêche le VirtualHost que j'ai défini d'opérer il devrait pointer vers un répertoire dans mes dossiers de /home, où j'ai installé les fichiers de mon site).

Merci d'avance pour tout lumière !

Posté le Jeudi 14 septembre 2017 - 06:31

Bonjour,

Cela signifie que votre domaine est bien interprété comme un site "local" mais par contre il n'est pas compris par les vhosts, donc c'est normalement une erreur au niveau de la configuration du vhost :

  • ServerName
  • ServerAlias
  • ou bien tout bêtement qu'il n'est pas activé.
  • ...

Pouvez-vous me copier/coller le contenu de votre fichier de config ?

Philo58

En réponse à par kgaut

Posté le Dimanche 17 septembre 2017 - 10:35

Je suis vraiment novice sur Linux. Mon fichier .conf est bien correct mais je redémarrais apache sans mettre sudo devant.

Le message en retour est le même mais avec sudo, mon site local s'affiche impeccablement (au passage, je suis bluffé par la vitesse du serveur).

Il me reste maintenant à trouver comment accéder à ce site local depuis une autre machine locale.

Merci en tout cas pour les réponses.

laurent

Posté le Jeudi 30 novembre 2017 - 08:12

Bonjour,
je vous remercie pour votre tuto . J'ai essayé plusieurs tutos pour créer ds virtuals hosts mais je n'arrive à rien.

J'ai suivi a la lettre ce tuto http://doc.ubuntu-fr.org/tutoriel/virtualhosts_avec_apache2
J'ai repris vos infos pour voir la ou j'ai pu me trompe mais je seche !

Lorsque je tape mon domaine name dans mon browser, je suis constamment redirigé vers 127.0.0.1 et non pas vers mon site. lorsque je tape mon url domaine-name.fr/image.jpg, elle s'affiche.

Pourriez vous me dire ou j'ai fais une erreur :

Répertoire ou je mets les fichiers du site est /home/laurent/www-dev/dev-laurent

Voila la conf
/etc/hosts
127.0.0.1 localhost
127.0.1.1 laurent-HP-Compaq-8100-Elite-CMT-PC
127.0.0.1 dev-laurent.fr

et
dev-laurent.conf

ServerAdmin localhost@dev-laurent.fr
ServerName www.dev-laurent.fr
ServerAlias dev-laurent.fr

DocumentRoot /var/www/dev-laurent

Options FollowSymLinks
AllowOverride None

Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all

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

Alias /doc/ "/usr/share/doc/"

Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128

merci pour aide.
J'ai déjà installé plusieurs sites dans le var/www/html et cela fonctionne bien mais je n'arrive pas avec les virtualhosts.

Laurent

Fatima

Posté le Samedi 6 janvier 2018 - 01:08

d'abord , Merci bien pour le tuto.
J'ai un vhost que j'ai créé et qui marche parfaitement sur la machine virtuelle , mais je souhaite d'y accéder à partie de ma machine physique. pouvez vous m'aider ?

Aspic

Posté le Jeudi 15 février 2018 - 17:53

Bonjour et un grand merci pour ce super tuto,
J'ai un petit soucie, j'ai crée un pointeur du style 'nomdemonentreprise.dev' mais quand je l’appéle dans le navigateur, il change le http en https provocant une erreur !
Avez vous une solution ? ou une orientation a me donner.

Posté le Samedi 17 février 2018 - 10:18

En fait j'ai trouvé, en changent juste l’extension DEV en DEP (ou un autre) cela fonctionne !

Posté le Mardi 20 février 2018 - 12:04

Oui, effectivement le .dev ne doit plus être utiliser, car le TLD à été acheté par google...

Il est recommandé de passer au .test

Timothy

Posté le Lundi 26 février 2018 - 14:49

Hello kgaut !
Merci pour votre tuto ;)
J'ai fait tous se qui fallai mais quand je met http://www.monsite.test/
j'arrive sur le dashboard/ de xampp
On dirai que monsite.test/ n'à fait que remplacé le localhost et que ça pointe vers le htdocs et pas vers web/index.php ...
Comment faire pour résoudre ça ?

Posté le Lundi 26 février 2018 - 17:31

Donc le pointage monsite.test => localhost fonctionne, mais le virtualhost non.

Est-ce que apache à bien été redémarré ? est-ce que le vhost à été activé ?

Laurent

Posté le Vendredi 16 mars 2018 - 12:32

Salut kgaut,
Déjà super tuto et il est bien explicite. Du coup moi je voudrais diffuser avec un reverse proxy mais du coup qu'elle config que je dois mettre dans le fichier .conf pour le faire je suis perdu à ce niveau la.
T'aurais une idée pour ça?

Posté le Jeudi 7 février 2019 - 18:53

Bonjour,
J'ai bien suivi à la lettre le tuto, mais j'ai un soucis quand je vais sur www.monsite.dev j'ai une erreur de connexion privé...
Sa dit que mon site n'est pas sécurisé etc.. Certificat non valide, il me sort un certificat de VMware alors que je suis sous ubuntu en dur directement(Pas de VM).

Quelqu'un pourrais m'aider svp ?

Posté le Mercredi 1 mai 2019 - 12:16

Remplace le .dev dans la procédure par .test.
Le .dev a été acheté par Google, il est connu et dispose d'une directive redirigeant le http en https qui ne fonctionne pas sur ton système. Testé, ça fonctionne.

Boubacar Boure…

Posté le Mercredi 20 mars 2019 - 02:57

Tout d'abord je vous remercie pour ce super tutoriel!!!
J'ai suivi à la lettre toutes les étapes du tutoriel jusqu'au niveau de l'activation de monsite.dev.conf 0ù j'ai rencontré un message d'erreur du genre " sudo : a2ensite : commande introuvable "
Je ne sais pas pourquoi ou pour quelle raison, merci bien pour votre aide !!!

barou

Posté le Jeudi 21 mars 2019 - 13:44

Bonjour. Merci pour ce tuto assez claire et explicite. J'ai suivi les configurations à la lettre mais j'ai un petit soucis. En fait quant je démarre monsite.test sur le navigateur j'obtient une page blanche et bizarrement un clic-droit--->code-source donne le code php complet : <?php echo 'Salut' ?>
Pouvez m'aider svp

Je tiens à vous signaler que je suis sur ubuntu 18, et j'utilise le repertoite /var/www/vhosts/monsite.test

hajar

Posté le Mardi 23 avril 2019 - 22:00

salut! j'ai un probleme avec ce virtual host, j'ai pas d'erreurs , la configuration est bien passée mais lorsque je navigue à mon site , il me dit "unable to connect" ou parfois "ce site n'existe pas" svp j'ai besoin d'aide :) !!

Posté le Mardi 23 avril 2019 - 22:33

Bonsoir, ton serveur apache est bien en fonction ? Tu a utiliser quoi comme extension ?

Posté le Mercredi 1 mai 2019 - 12:15

Remplace le .dev dans la procédure par .test.
Le .dev a été acheté par Google, il est connu et dispose d'une directive redirigeant le http en https qui ne fonctionne pas sur ton système. Testé, ça fonctionne.

Messou

Posté le Dimanche 28 avril 2019 - 13:40

S'il y'avait des étoiles à mettre,je pense que je pourai en mettre 10000.
Rien que pour ce super tuto...j'ai tellement cherché partout que j'étais désespéré jusqu'à ce que.
MERCI !

Alm6

Posté le Mercredi 22 mai 2019 - 17:16

Je suis fatigué, à bout de nerf :)
J'ai suivi a la lettre plusieurs fois, j'ai abandonné durant des jours et je suis revenu aujourd'hui :)
Toujours toutes les configurations marchent. Apache redémarre parfaitement ..... mais impossible d’accéder a la page d'accueil : Ni en local (Ubuntu server 18.04) ni à distance par IP (http://192.168.1.10 ou http://192.168.1.10/monsite.com ou www.monsit.....)

Ajouter un commentaire

Ne sera pas publié

HTML restreint

  • Balises HTML autorisées : <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...