Comment créer un VirtualHost Apache sur Linux pour un projet PHP local

Comment créer un VirtualHost Apache sur Linux pour un projet PHP local

0 commentaire(s)

Lorsque l'on développe plusieurs applications PHP sur une machine Debian, utiliser uniquement http://localhost devient rapidement peu pratique.

Les VirtualHosts d'Apache permettent d'associer un nom de domaine local à chaque projet. Par exemple :

  • http://mon-projet.local
  • http://blog.local
  • http://app.local

Chaque nom peut ainsi pointer vers un répertoire différent.

Dans cet article, nous allons voir comment configurer un VirtualHost Apache sur Debian 13 (Trixie) pour un projet PHP local.

L'exemple utilisera :

  • Debian 13 ;
  • Apache 2.4 ;
  • PHP 8.4 ;
  • un projet situé dans /var/www/mon-projet ;
  • le nom de domaine local mon-projet.local.

Remarque : cette configuration est destinée au développement local. Elle n'est pas une configuration de production.

1. Installer Apache et PHP


Si Apache et PHP ne sont pas encore installés, commencez par mettre à jour la liste des paquets :

Bash
sudo apt update
sudo apt upgrade

Installez ensuite Apache et PHP :

Bash
sudo apt install apache2 php libapache2-mod-php

Debian 13 fournit actuellement PHP 8.4 comme version par défaut. Le paquet php est un paquet de dépendance qui pointe vers la version PHP stable fournie par Debian.

Vous pouvez vérifier les versions installées avec :

Bash
apache2 -v
php -v

Vous devriez obtenir quelque chose correspondant à :

Text
Server version: Apache/2.4.68

et :

Text
PHP 8.4.x

Les numéros de révision exacts peuvent naturellement évoluer avec les mises à jour de sécurité de Debian.

Vérifiez également que le service Apache fonctionne :

Bash
sudo systemctl status apache2

Si nécessaire :

Bash
sudo systemctl enable --now apache2

2. Créer le répertoire du projet


Nous allons placer notre projet dans :

Text
/var/www/mon-projet

Créez le répertoire :

Bash
sudo mkdir -p /var/www/mon-projet

Pour tester rapidement la configuration, créez un fichier PHP :

Bash
sudo nano /var/www/mon-projet/index.php

Ajoutez :

PHP
<?php
echo '<h1>Mon projet fonctionne !</h1>';
echo '<p>PHP fonctionne avec Apache.</p>';

Enregistrez le fichier.

2.1. À propos des permissions


Apache fonctionne normalement avec l'utilisateur système www-data.

Il n'est cependant pas nécessaire de donner systématiquement la propriété complète du projet à www-data.

Pour un environnement de développement, il est souvent préférable que votre utilisateur Linux reste propriétaire des fichiers du projet et de n'accorder à Apache que les droits dont l'application a réellement besoin.

Pour un simple test, vous pouvez par exemple utiliser :

Bash
sudo chown -R $USER:$USER /var/www/mon-projet

Les applications nécessitant des répertoires accessibles en écriture, comme Symfony ou Laravel, devront ensuite avoir des permissions adaptées sur leurs répertoires de cache, de logs ou de fichiers uploadés.

3. Créer le VirtualHost Apache


Les configurations des sites Apache sont stockées dans :

Text
/etc/apache2/sites-available/

Créez le fichier :

Bash
sudo nano /etc/apache2/sites-available/mon-projet.conf

Ajoutez la configuration suivante :

<VirtualHost *:80>
ServerName mon-projet.local
DocumentRoot /var/www/mon-projet
<Directory /var/www/mon-projet>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/mon-projet-error.log
CustomLog ${APACHE_LOG_DIR}/mon-projet-access.log combined
</VirtualHost>

3.1. Explications


VirtualHost *:80

<VirtualHost *:80>

Apache écoute ici sur le port HTTP 80, quelle que soit l'adresse IP utilisée par la machine.

Les VirtualHosts basés sur le nom permettent à plusieurs sites de partager la même adresse IP et le même port. Apache sélectionne ensuite le VirtualHost correspondant au ServerName ou au ServerAlias transmis dans la requête HTTP.

ServerName

ServerName mon-projet.local

C'est le nom que nous utiliserons dans le navigateur :

Text
http://mon-projet.local

Il est recommandé de définir explicitement un ServerName pour chaque VirtualHost.

DocumentRoot

DocumentRoot /var/www/mon-projet

Cette directive indique à Apache où se trouvent les fichiers du site.

<Directory>

<Directory /var/www/mon-projet>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Require all granted autorise Apache à servir le contenu de ce répertoire.

AllowOverride All permet notamment à un fichier .htaccess de modifier certaines règles Apache.

Si votre application n'utilise pas .htaccess, vous pouvez utiliser :

AllowOverride None

Ce choix est généralement préférable lorsque l'application n'en a pas besoin, car la configuration Apache est alors centralisée.

Les journaux

ErrorLog ${APACHE_LOG_DIR}/mon-projet-error.log
CustomLog ${APACHE_LOG_DIR}/mon-projet-access.log combined

Les erreurs seront enregistrées dans :

Text
/var/log/apache2/mon-projet-error.log

et les accès dans :

Text
/var/log/apache2/mon-projet-access.log

4. Ajouter le domaine dans /etc/hosts


Notre domaine mon-projet.local n'existe pas sur Internet.

Il faut donc indiquer à notre machine que ce nom doit correspondre à 127.0.0.1.

Modifiez le fichier /etc/hosts :

Bash
sudo nano /etc/hosts

Ajoutez :

Text
127.0.0.1 mon-projet.local

Vous pouvez également utiliser :

Text
127.0.0.1 mon-projet.local www.mon-projet.local

si vous souhaitez utiliser les deux noms.

Le fichier /etc/hosts permet ainsi de simuler localement une résolution DNS. Apache ne crée pas lui-même les entrées DNS correspondant aux VirtualHosts.

Si vous utilisez un autre ordinateur pour accéder au serveur Debian, cette modification doit être effectuée sur la machine cliente, ou remplacée par une véritable configuration DNS.

5. Activer le VirtualHost


Le fichier que nous venons de créer se trouve dans :

Text
/etc/apache2/sites-available/

Cela signifie qu'il est disponible mais pas encore activé.

Activez-le avec :

Bash
sudo a2ensite mon-projet.conf

Vous pouvez éventuellement désactiver le VirtualHost par défaut d'Apache :

Bash
sudo a2dissite 000-default.conf

Ce n'est toutefois pas obligatoire pour faire fonctionner notre nouveau VirtualHost.

6. Vérifier la configuration Apache


Avant de recharger Apache, vérifiez toujours sa configuration :

Bash
sudo apachectl configtest

Si tout est correct, vous devez obtenir :

Text
Syntax OK

C'est une étape importante : elle permet d'éviter de recharger une configuration contenant une erreur de syntaxe.

Vous pouvez ensuite recharger Apache :

Bash
sudo systemctl reload apache2

Un reload suffit ici : il permet à Apache de prendre en compte la nouvelle configuration sans arrêter complètement le service.

7. Vérifier les VirtualHosts actifs

Apache fournit une commande très pratique pour examiner les VirtualHosts configurés :

Bash
sudo apachectl -S

Vous devriez notamment retrouver une ligne correspondant à :

Text
*:80 mon-projet.local

Cette commande est particulièrement utile lorsqu'une machine héberge plusieurs projets et que l'on cherche à comprendre quel VirtualHost Apache utilise. La documentation Apache recommande justement apachectl -S pour diagnostiquer la configuration des VirtualHosts.

8. Tester le site


Vous pouvez maintenant ouvrir votre navigateur et saisir :

Text
http://mon-projet.local

Vous devriez voir :

Text
Mon projet fonctionne !
PHP fonctionne avec Apache.

Si vous préférez effectuer le test depuis le terminal :

Bash
curl http://mon-projet.local

Vous devriez obtenir le contenu HTML généré par PHP.

Vous pouvez également vérifier directement que PHP est exécuté par Apache en créant temporairement :

Bash
sudo nano /var/www/mon-projet/info.php

avec :

PHP
<?php
phpinfo();

Puis ouvrez :

Text
http://mon-projet.local/info.php

Vous devriez obtenir la page d'informations PHP.

Supprimez ensuite ce fichier, car phpinfo() expose beaucoup d'informations sur l'environnement PHP :

Bash
sudo rm /var/www/mon-projet/info.php

9. Activer mod_rewrite si nécessaire


De nombreuses applications PHP modernes utilisent le module rewrite d'Apache.

Vous pouvez l'activer avec :

Bash
sudo a2enmod rewrite

Puis vérifier la configuration :

Bash
sudo apachectl configtest

et recharger Apache :

Bash
sudo systemctl reload apache2

Avec :

AllowOverride All

dans le VirtualHost, une application utilisant un fichier .htaccess pourra notamment définir ses propres règles de réécriture.

10. Ajouter plusieurs projets


L'intérêt des VirtualHosts apparaît surtout lorsque plusieurs projets sont installés sur la même machine.

Par exemple :

Text
/var/www/site1
/var/www/site2
/var/www/site3

Vous pouvez créer :

Text
/etc/apache2/sites-available/site1.conf
/etc/apache2/sites-available/site2.conf
/etc/apache2/sites-available/site3.conf

site1.conf

<VirtualHost *:80>
ServerName site1.local
DocumentRoot /var/www/site1
<Directory /var/www/site1>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/site1-error.log
CustomLog ${APACHE_LOG_DIR}/site1-access.log combined
</VirtualHost>

site2.conf

<VirtualHost *:80>
ServerName site2.local
DocumentRoot /var/www/site2
<Directory /var/www/site2>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/site2-error.log
CustomLog ${APACHE_LOG_DIR}/site2-access.log combined
</VirtualHost>

Puis ajoutez les noms dans /etc/hosts :

Text
127.0.0.1 site1.local
127.0.0.1 site2.local

Activez les deux sites :

Bash
sudo a2ensite site1.conf
sudo a2ensite site2.conf

Vérifiez la configuration :

Bash
sudo apachectl configtest

Puis rechargez Apache :

Bash
sudo systemctl reload apache2

Vous pouvez alors accéder aux deux applications avec :

Text
http://site1.local
http://site2.local

11. Utiliser ServerAlias


Si une application doit être accessible avec plusieurs noms, utilisez ServerAlias.

Par exemple :

<VirtualHost *:80>
ServerName mon-projet.local
ServerAlias www.mon-projet.local
DocumentRoot /var/www/mon-projet
<Directory /var/www/mon-projet>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/mon-projet-error.log
CustomLog ${APACHE_LOG_DIR}/mon-projet-access.log combined
</VirtualHost>

Vous pourrez alors utiliser :

Text
http://mon-projet.local

ou :

Text
http://www.mon-projet.local

Ajoutez également les deux noms dans /etc/hosts :

Text
127.0.0.1 mon-projet.local www.mon-projet.local

Apache utilise ServerName et ServerAlias pour déterminer quel VirtualHost doit répondre à une requête donnée.

12. Faut-il utiliser NameVirtualHost ?


Avec les anciennes versions d'Apache, on pouvait rencontrer une directive de ce type :

NameVirtualHost *:80

Elle n'est pas nécessaire avec Apache 2.4.

Une configuration moderne sous Debian 13 se contente de :

<VirtualHost *:80>
ServerName mon-projet.local
...
</VirtualHost>

Apache 2.4 gère nativement les VirtualHosts basés sur le nom.

Il est donc inutile d'ajouter NameVirtualHost *:80 à une nouvelle configuration.

13. Structure finale


À ce stade, notre installation ressemble à ceci :

Text
/var/www/
└── mon-projet/
└── index.php
/etc/apache2/
├── sites-available/
│ └── mon-projet.conf
└── sites-enabled/
└── mon-projet.conf -> ../sites-available/mon-projet.conf

Et /etc/hosts contient :

Text
127.0.0.1 mon-projet.local

Le VirtualHost contient :

<VirtualHost *:80>
ServerName mon-projet.local
DocumentRoot /var/www/mon-projet
<Directory /var/www/mon-projet>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/mon-projet-error.log
CustomLog ${APACHE_LOG_DIR}/mon-projet-access.log combined
</VirtualHost>

Conclusion


La création d'un VirtualHost Apache pour un projet PHP sous Debian 13 reste relativement simple.

Les commandes essentielles sont :

Bash
sudo apt update
sudo apt install apache2 php libapache2-mod-php

Puis :

Bash
sudo mkdir -p /var/www/mon-projet
sudo nano /etc/apache2/sites-available/mon-projet.conf

Ajouter le domaine dans :

Bash
sudo nano /etc/hosts

Puis activer et vérifier le site :

Bash
sudo a2ensite mon-projet.conf
sudo apachectl configtest
sudo systemctl reload apache2

Enfin :

Bash
sudo apachectl -S

permet de vérifier les VirtualHosts réellement pris en compte par Apache.

Vous pouvez ensuite accéder à votre projet avec :

Text
http://mon-projet.local

Cette méthode permet de reproduire localement une organisation proche d'un serveur web réel, tout en pouvant héberger plusieurs projets PHP indépendants sur une seule machine Debian 13.

Vous aimerez peut-être aussi :

Commentaires

Aucun commentaire approuvé pour le moment.

Connectez-vous avec un compte commentateur pour publier un commentaire. Se connecter.