Introduction
Pour des raisons diverses et variées, il est souvent nécessaire de disposer en local de plusieurs environnements de développement avec Apache. Par exemple un environnement dédié par version de PHP pour des contextes de migration, un environnement uniquement pour du debug à l’image de l’environnement de production afin de reproduire un incident…
Environnement | Description | Version de PHP |
---|---|---|
www.sqlpac.dvt |
Développement | PHP 7.2 |
www.sqlpac.ppd |
Préproduction | PHP 7.0 |
www.sqlpac.dbg |
Debug production | PHP 5.6 |
La configuration de tels environnements est aisée avec les hôtes virtuels d’Apache 2.2.
Les distributions sont installées sur Windows 10 avec les caractéristiques suivantes :
Répertoire | Source des binaires | |
---|---|---|
Apache 2.2.31 64 bits (OpenSSL) | D:\opt\apache
%APACHE_HOME% |
apachehaus.com/cgi-bin/download.plx |
PHP 5.6 64 bits | D:\opt\scripts\php-5.6 |
windows.php.net/download/ |
PHP 7.0 64 bits | D:\opt\scripts\php-7.0 |
windows.php.net/download/ |
PHP 7.2 64 bits | D:\opt\scripts\php-7.2 |
windows.php.net/download/ |
Référencement des domaines virtuels dans le fichier hosts
Afin que les domaines virtuels www.sqlpac.dvt
, www.sqlpac.ppd
… soient résolus, éditer le
fichier hosts
de la machine Windows pour associer les domaines à l’IP locale 127.0.0.1
. Ce fichier est
dans le répertoire C:\Windows\system32\drivers\etc
et il doit être ouvert avec les droits administrateur pour
pouvoir le mettre à jour. Éditer ce fichier avec précaution, il est sensible pour l’OS.
C:\Windows\system32\drivers\etc\hosts
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.1 www.sqlpac.dvt
127.0.0.1 www.sqlpac.ppd
127.0.0.1 www.sqlpac.dbg
Ne pas choisir l’extension .dev
, avec Apache,
cette extension finit en erreur 408 (Timeout
).
Une simple commande ping
confirme la résolution des domaines virtuels. Il se peut qu’un redémarrage de la machine
soit nécessaire.
C:\Users\sqlpac> ping www.sqlpac.dvt
Envoi d’une requête 'ping' sur www.sqlpac.dvt [127.0.0.1] avec 32 octets de données : Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128 Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128 Statistiques Ping pour 127.0.0.1: Paquets : envoyés = 2, reçus = 2, perdus = 0 (perte 0%), Durée approximative des boucles en millisecondes : Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms Ctrl+C
Configuration des virtual hosts
Dans le répertoire %APACHE_HOME/conf/extra
, un fichier de configuration par hôte virtuel est créé : le port 80 est
indiqué ici (pas de SSL sur le port 443).
%APACHE_HOME/conf/extra/httpd-sqlpac-dvt.conf
<VirtualHost *:80>
DocumentRoot "D:/www/dev"
ServerName sqlpac.dvt
ServerAlias www.sqlpac.dvt
ErrorLog "logs/www.sqlpac.dvt-error.log"
CustomLog "logs/www.sqlpac.dvt-access.log" common
</VirtualHost>
%APACHE_HOME/conf/extra/httpd-sqlpac-ppd.conf
<VirtualHost *:80>
DocumentRoot "D:/www/preproduction"
ServerName sqlpac.ppd
ServerAlias www.sqlpac.ppd
ErrorLog "logs/www.sqlpac.ppd-error.log"
CustomLog "logs/www.sqlpac.ppd-access.log" common
</VirtualHost>
%APACHE_HOME/conf/extra/httpd-sqlpac-dbg.conf
<VirtualHost *:80>
DocumentRoot "D:/www/productiondbg"
ServerName sqlpac.dbg
ServerAlias www.sqlpac.dbg
ErrorLog "logs/www.sqlpac.dbg-error.log"
CustomLog "logs/www.sqlpac.dbg-access.log" common
</VirtualHost>
À cette étape, il est d’ores et déjà possible de définir pour le virtual host
les alias, les propriétés et options des répertoires (permissions, FollowSymLinks
…), etc. :
%APACHE_HOME/conf/extra/httpd-sqlpac-dbg.conf
<VirtualHost *:80>
DocumentRoot "D:/www/productiondbg"
ServerName sqlpac.dbg
ServerAlias www.sqlpac.dbg
ErrorLog "logs/www.sqlpac.dbg-error.log"
CustomLog "logs/www.sqlpac.dbg-access.log" common
Alias /articles "D:/www/productiondbg/referentiel/docs"
<Directory "D:/www/productiondbg">
Options Indexes FollowSymLinks
Options +ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Pour que le serveur Apache prenne en compte ces nouveaux hôtes virtuels, référencer les fichiers de configuration
précédemment créés avec l’instruction Include
à la fin du fichier de configuration
global du serveur Apache (%APACHE_HOME%\conf\httpd.conf
) :
%APACHE_HOME%\conf\httpd.conf
Include conf/extra/httpd-sqlpac-dvt.conf
Include conf/extra/httpd-sqlpac-ppd.conf
Include conf/extra/httpd-sqlpac-dbg.conf
Redémarrer le serveur Apache et les virtual hosts sont prêts. Effectuer un simple test avec une page html : http://www.sqlpac.ppd/index.html
Activation du module fcgid d’Apache (fastCGI)
Le module fcgid d’Apache est utilisé ici pour PHP et il se peut que ce module ne soit pas présent dans la distribution Apache 2.2 téléchargée.
Pour vérifier que le module existe, rechercher le fichier mod_fcgid.so
dans le répertoire %APACHE_HOME/modules
.
Si le module n’est pas présent, il peut être téléchargé depuis ApacheHaus (ApacheHaus.com - Mod FCGID for Apache 2.2.x x64).
Il s’agit d’une archive zip avec 2 fichiers à copier dans les répertoires ci-dessous :
httpd-fcgid.conf |
%APACHE_HOME%\conf\extra |
mod_fcgid.so |
%APACHE_HOME%\modules |
Le module fcgid est ajouté au serveur Apache en modifiant le fichier de configuration httpd.conf
avec les directives ci-dessous :
%APACHE_HOME%\conf\httpd.conf
# AJOUT FCGID
#
LoadModule fcgid_module modules/mod_fcgid.so
Include conf/extra/httpd-fcgid.conf
Commenter les dernières lignes dans le fichier %APACHE_HOME%/conf/extra/httpd-fcgid.conf
car elles définissent une configuration
globale, ce qui ne sera pas le cas ici, la configuration étant réalisée par virtual host.
%APACHE_HOME%\conf\extra\httpd-fcgid.conf
# Global Config Example
# Comment out next 4 lines to use per-Directory or per-VirtualHost configuration
# <Files ~ "\.php$">
# Options ExecCGI
# AddHandler fcgid-script .php
# FcgidWrapper "C:/php/php-cgi.exe" .php
# </Files>
Redémarrer le serveur Apache.
Personnalisation de la configuration PHP par hôte virtuel
Chaque hôte virtuel utilise une version de PHP bien précise ici.
Domaine | Version de PHP |
---|---|
www.sqlpac.dvt |
PHP 7.2 |
www.sqlpac.ppd |
PHP 7.0 |
www.sqlpac.dbg |
PHP 5.6 |
Comme pour les hôtes virtuels, un fichier de configuration apache est préparé dans le répertoire
%APACHE_HOME%\conf\extra
pour chaque version de PHP :
%APACHE_HOME%\conf\extra\httpd-sqlpac-php-72.conf (PHP 7.2)
FcgidInitialEnv PHPRC "D:/opt/scripts/php-7.2"
AddHandler fcgid-script .php .inc .html
FcgidWrapper "D:/opt/scripts/php-7.2/php-cgi.exe" .php
FcgidWrapper "D:/opt/scripts/php-7.2/php-cgi.exe" .inc
FcgidWrapper "D:/opt/scripts/php-7.2/php-cgi.exe" .html
%APACHE_HOME%\conf\extra\httpd-sqlpac-php-70.conf (PHP 7.0)
FcgidInitialEnv PHPRC "D:/opt/scripts/php-7.0"
AddHandler fcgid-script .php .inc .html
FcgidWrapper "D:/opt/scripts/php-7.0/php-cgi.exe" .php
FcgidWrapper "D:/opt/scripts/php-7.0/php-cgi.exe" .inc
FcgidWrapper "D:/opt/scripts/php-7.0/php-cgi.exe" .html
%APACHE_HOME%\conf\extra\httpd-sqlpac-php-56.conf (PHP 5.6)
FcgidInitialEnv PHPRC "D:/opt/scripts/php-5.6"
AddHandler fcgid-script .php .inc .html
FcgidWrapper "D:/opt/scripts/php-5.6/php-cgi.exe" .php
FcgidWrapper "D:/opt/scripts/php-5.6/php-cgi.exe" .inc
FcgidWrapper "D:/opt/scripts/php-5.6/php-cgi.exe" .html
Les fichiers de configuration pour PHP définissent les directives pour le module FastCGI (Fcgid
) : traitement des
fichiers *.php, *.inc, *.html
avec l’exécutable php-cgi.exe
approprié en fonction de la version.
La configuration PHP appropriée est alors attribuée à chaque virtual host avec la directive Include
dans le fichier de configuration
du virtual host.
%APACHE_HOME/conf/extra/httpd-sqlpac-dvt.conf
<VirtualHost *:80>
Include conf/extra/httpd-sqlpac-php-72.conf
DocumentRoot "D:/www/productiondbg"
...
</VirtualHost>
%APACHE_HOME/conf/extra/httpd-sqlpac-ppd.conf
<VirtualHost *:80>
Include conf/extra/httpd-sqlpac-php-70.conf
DocumentRoot "D:/www/productiondbg"
...
</VirtualHost>
%APACHE_HOME/conf/extra/httpd-sqlpac-dbg.conf
<VirtualHost *:80>
Include conf/extra/httpd-sqlpac-php-56.conf
DocumentRoot "D:/www/productiondbg"
...
</VirtualHost>
Redémarrer le serveur Apache et c’est terminé, sauf si des erreurs de syntaxe se sont glissées par ci par là, consulter les fichiers de log d’Apache.
Tests
Créér un fichier phpinfo.html
avec le code ci-dessous :
phpinfo.html
<!DOCTYPE html> <html> <head> <title>PHP Info</title> </head> <body> <p>Informations PHP - Script PHP</p>
<?php phpinfo(); ?>
</body> </html>
Copier ce fichier dans un répertoire de chaque virtual host, la version de PHP utilisée est confirmée avec la fonction phpinfo
.
http://www.sqlpac.dvt/phpinfo.html |
PHP Version 7.2.1 |
http://www.sqlpac.ppd/phpinfo.html |
PHP Version 7.0.27 |
http://www.sqlpac.dbg/phpinfo.html |
PHP Version 5.6.33 |