Serveur Web Apache v 1.3.12 sous Windows

Introduction

La mise en service d'un serveur Web local Apache v 1.3.12 sous Windows pour les développements PHP est proposée dans cette note technique.

Parmi les points techniques et les principes fondamentaux abordés qui sont les plus importants :

  • Démarrage et arrêt du serveur.
  • Création d'Alias.
  • Implémentation de PHP 4.
  • Utilisation des fichiers .htaccess pour protéger et paramétrer les répertoires.

Installation du serveur Web Apache v 1.3.12

Pour des raisons de compatibilité avec les commandes MSDOS et pour une pratique plus aisée, le serveur Web Apache est installé dans le répertoire personnalisé ci-dessous afin d'éviter des noms de répertoire de plus de 8 lettres ou comportant des espaces (le répertoire par défaut d'installation est C:\Program Files\Apache Group\Apache) :

C:\Serveurs\Web\Apache

Dans la suite de cet article, %APACHE_DIR% désigne le répertoire d'installation du serveur Apache 1.3.

Démarrage du serveur Web

Dans une invite de commande DOS, pour démarrer le serveur Web Apache, lancer l'exécutable apache situé dans le répertoire %APACHE_DIR% avec l'argument -k start :

DOS> cd %APACHE_DIR%
DOS> apache -k start

Pour tester la mise en service du serveur Apache, lancer le navigateur et saisir l'adresse URL http://localhost ou http://127.0.0.1. Cette adresse amène par défaut à la page d'accueil d'Apache.

Redémarrage du serveur Web

Pour redémarrer le serveur Web Apache :

DOS> cd %APACHE_DIR%
DOS> apache -k restart

Arrêt du serveur Web

Pour éteindre le serveur Web :

DOS> cd %APACHE_DIR%
DOS> apache -k shutdown

Les fichiers de configuration d'Apache

Les fichiers principaux de configuration pour Apache sont httpd.conf, srm.conf, access.conf. Ces derniers fichiers sont installés par défaut dans le répertoire %APACHE_DIR%\Conf. Après exécution du fichier httpd.conf par le serveur Apache, srm.conf et access.conf sont respectivement lus et interprétés par le serveur.

A l'installation d'Apache, les fichiers srm.conf et access.conf sont vierges. Il est par ailleurs recommandé par Apache de laisser ces derniers vides et de tout centraliser le paramétrage dans le fichier httpd.conf.

Répertoires virtuels ou "Alias"

Au sein d'Apache, l'ajout d'alias est illimité. Un alias permet d'associer un répertoire OS physique à un répertoire vituel Apache :

C:\repertoire\mesdeveloppements <=> http://127.0.0.1/monsite

Pour ajouter un alias, repérer le paragraphe #Alias dans le fichier httpd.conf.

### Section2 : 'Main' server configuration
# Aliases ...

L'ajout d'alias s'effectue alors très simplement dans ce paragraphe grâce aux directives Alias comme indiquées en exemple ci-dessous :

%APACHE_DIR%\Conf\httpd.conf
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Ajout ici des alias ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Creation d'un alias le 02.01.2001 pour les tests php
Alias /test_php/ "c:/informatique/developpements/php/"
#
# Ajout pour implementation de phpMyAdmin v 2.5
Alias /php_admin/ "c:/serveurs/web/php/v4/myadmin/phpMyAdmin/"
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

La page web c:/informatique/developpements/php/index.htmlcorrespondra à l'adresse URL http://127.0.0.1/php_admin/index.html/ avec la directive Alias définie ci-dessus.

Dans les fichiers de configurations d'Apache, seuls les "/" sont autorisés.

Implémentation de l'interpréteur de script PHP

L'intégration de l'interpréteur de script PHP au sein du serveur Apache est réalisée ici pour la machine PHP v 4.0.2. L'interpréteur de script PHP est l'exécutable php.exe avec ses librairies associées.

Il faut spécifier au serveur Apache dans un premier temps les extensions des fichiers Web associés à l'interpréteur de script PHP. Pour la machine PHP ces extensions sont *.phml, *.php, *.php3 et *.php4.

Dans le fichier httpd.conf, ces associations sont consignées dans le paragraphe

### Section2 : 'Main' server configuration
# AddType ...

grâce aux directives AddType:

%APACHE_DIR%\Conf\httpd.conf
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .phtml
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

La nomenclature x-httpd-php aura toute son importance pour la suite.

La seconde étape consiste à donner un alias pour le répertoire contenant l'interpréteur de script PHP. La directive ScriptAlias réalise cette opération, directive qui précise à Apache qu'il s'agit d'un répertoire hébergeant des interpréteurs de scripts (CGI, PHP, Perl, Python...).

ScriptAlias /php/ c:/serveurs/web/php/v4/RTime/

Dans l'exemple ci-dessus, la machine PHP 4.0 est installée dans le répertoire c:/serveurs/web/php/v4/RTime

Dernière étape : indiquer que toute application de type "application/x-httpd-php" (*.php, *.php3...) est systématiquement traitée par /php/php.exe grâce à la directive Action.

Action application/x-httpd-php /php/php.exe

L'ajout de modules Apache

Des modules complémentaires pour Apache sont fournis dans le répertoire %APACHE_DIR%\Modules. Il s'agit de librairies de liaisons dynamiques (i.e. fichiers DLL). Pour activer ces modules, il suffit de décommenter les lignes ci-dessous dans le paragraphe Dynamic Shared Object du fichier de configuration httpd.conf.

# Dynamic Shared Object (DSO) Support
#
#LoadModule anon_auth_module modules/ApacheModuleAuthAnon.dll
#LoadModule cern_meta_module modules/ApacheModuleCERNMeta.dll
#LoadModule digest_module modules/ApacheModuleDigest.dll
#LoadModule expires_module modules/ApacheModuleExpires.dll
#LoadModule headers_module modules/ApacheModuleHeaders.dll
#LoadModule proxy_module modules/ApacheModuleProxy.dll
#LoadModule rewrite_module modules/ApacheModuleRewrite.dll
#LoadModule speling_module modules/ApacheModuleSpeling.dll
#LoadModule status_module modules/ApacheModuleStatus.dll
#LoadModule usertrack_module modules/ApacheModuleUserTrack.dll

Ce dernier paragraphe permet également en outre de charger des modules personnels.

Toutefois, la documentation Apache précise bien que l'ordonnancement de chargement de ces modules doit être scrupuleusement respecté pour des raisons de performances du serveur Web (consulter la documentation en ligne à ce sujet).

Les fichiers .htaccess

Les fichiers .htaccess sont des fichiers de configuration d'Apache permettant de définir des règles dans un répertoire et dans tous les sous répertoires qui ne possèdent de fichiers .htaccess.

Ces derniers sont utilisés pour protéger un répertoire par un mot de passe ou pour changer le nom ou l'extension de la page d'index, ou encore pour interdire l'accès au répertoire.

Intérêt des fichiers .htaccess

Les fichiers .htaccess peuvent être utilisés dans n'importe quel répertoire virtuel ou sous répertoire.

Les principales raisons d'utilisation des fichiers .htaccess sont :

  • Gérer l'accès à certains fichiers
  • Ajouter un mime-type
  • Protéger l'accès à un répertoire par un mot de passe
  • Définir des pages d'erreurs personnalisées

Principe des fichiers .htaccess

Le fichier .htaccess est placé dans le répertoire dans lequel ce dernier doit agir. Il agit ainsi sur les permissions du répertoire qui le contient et de tous ses sous répertoires. Un fichier .htaccess dans un sous répertoire d'un répertoire déjà contrôlé par un fichier .htaccess est possible.

Le fichier .htaccess du répertoire parent reste en activité tant que les fonctionnalités n'ont pas été réécrites.

Empêcher l'accès à des ressources

Pour créér un fichier .htaccess sous Windows et Notepad, enregistrer le fichier en protégeant .htaccess avec des double quotes lors de l'enregistrement (".htaccess").

Empêcher l'accès à un répertoire à un domaine

La syntaxe pour bloquer l'accès d'un répertoire à un domaine est la suivante :

Allow (all, [liste de domaine])
Deny (all, [liste de domaine])
Order (Allow,Deny ou Deny,Allow)
.htaccess
Order Deny, Allow
Deny from .sqlpac.com

Toutes les personnes (requêtes) provenant du domaine .sqlpac.com ne pourront avoir accès aux ressources comprises dans le répertoire et ses sous-répertoires. La commande Order sert à préciser explicitement que la commande Deny va bien annuler l'effet de Allow et non l'inverse.

Empêcher l'accès à un type de fichiers à un domaine

<Files *.jpg>
  Order Deny, Allow
  Deny from .sqlpac.com
</Files>

Toutes les personnes ou requêtes provenant du domaine .sqlpac.com ne pourront avoir accès aux images dont l'extension est .jpg dans le répertoire et ses sous répertoires.

Autoriser l'accès à un groupe de fichiers à un domaine et un pays

<Files syb*>
  Order Allow, Deny
  Deny from all
  Allow from .sqlpac.com
  Allow from .fr
</Files>

Toutes les personnes ou requêtes provenant du domaine .sqlpac.com ou des domaines ayant la terminaison .fr pourront avoir accès aux fichiers commençant par sybdans le répertoire et ses sous répertoires (par exemple le fichier sybase-ase-12.5.html).

Protéger un répertoire par un mot de passe

Il s'agit d'une des applications les plus utiles du fichier .htaccess car elle permet de définir de façon sûre (à l'aide d'un login et d'un mot de passe) les droits d'accès à des fichiers par certains utilisateurs. La syntaxe est la suivante :

AuthUserFile (nom du fichier)
AuthType (Basic)
AuthName ([texte])

Cette commande permet de définir l'emplacement du fichier contenant les logins et les mots de passe des utilisateurs autorisés à accéder à une ressource donnée. Voici un exemple de fichier .htaccess

AuthName "Accès Espace privé"
AuthType Basic
AuthUserFile /home/www/.FichierDeMotDePasse
<Limit GET POST>
Require valid-user
</Limit>
  • AuthName paramètre le libellé de la boîte de dialogues demandant le nom d'utilisateur et le mot de passe.
  • AuthType Basic précise qu'il faut utiliser AuthUserFile pour l'authentification.
  • Require valid-user précise que l'on autorise uniquement les personnes identifiées.
  • AuthUserFile donne le chemin complet d'accès au fichier des comptes et mot de passe. Le chemin ne doit pas être un alias Apache mais le chemin OS physique exact.

Voici un exemple de fichier de mot de passe (ici .FichierDeMotDePasse) :

sqlpac:$apr1$D8......$m8PWrn90oDjiIPqyaa9pl.
cgcam:$apr1$19......$PX1A0WOp8UpZGkekwiRpe0

.FichierDeMotDePasse est un simple fichier texte contenant <username>:<mot de passe>. Le mot de passe peut être crypté ou non. Les versions cryptées de mot de passe peuvent être générées grâce au binaire htpasswd dans le répertoire %APACHE_DIR%\bin :

DOS> %APACHE_DIR\bin\htpasswd
htpasswd -c D:\.FichierDeMotDePasse sqlpac
Automatically using MD5 format on Windows.
New password: *******
Re-type new password: *******
Adding password for user sqlpac

-c n'est utilisé que pour créer le fichier des mots de passe lorsque ce dernier n'existe pas.

Personnalisation des messages d'erreurs

Il s'agit d'une fonctionnalité pratique car elle permet de définir une page par défaut pour un type d'erreur donné (voir l'ensemble des codes d'erreur et leurs signification...)

Cela permet d'une part de guider l'utilisateur au lieu d'afficher la banale page du navigateur, ainsi que d'égayer la navigation même en cas d'erreur.

ErrorDocument (code-à-3chiffres [nom du fichier ou texte ou URL])

Les deux lignes suivantes permettent de définir des pages d'erreur personnalisées au cas où l'accès à un document serait interdit ou bien que le document n'existe pas :

ErrorDocument 403 /erreurs/403.php3
ErrorDocument 404 /erreurs/404.php3

Ceci vous permet de donner un message d'erreur personnalisé remplaçant les messages renvoyés par le navigateur.

Voici quelques unes des erreurs les plus courantes à personnaliser :

  • 401 Unauthorized : la personne n'a pas passé avec succès l'identification.
  • 403 Forbidden : le serveur n'a pas le droit de répondre à votre requête.
  • 404 Not Found : le serveur n'a pas trouvé le document souhaité.

Changer le fichier Index par défaut

Le fichier index est le fichier qui est affiché lorsqu'aucun nom de fichier n'est défini dans l'URL (par exemple http://www.serveur.com/repertoire). Cela permet d'éviter que le navigateur liste l'ensemble des fichiers contenus dans le répertoire (pour des raisons de confidentialité).

La syntaxe pour effectuer ce type d'opération est la suivante :

DirectoryIndex (fichiers)

Voici un exemple de mise en application :

DirectoryIndex index.php index.html index.phtml /erreurs/403.php

Lorsque vous essayez d'accéder au répertoire sans préciser la page à afficher, Apache a recours à la directive DirectoryIndex. En général, par défaut cette directive pointe vers index.html puis index.htm.

Dans l'exemple ci-dessus, Apache va commencer par chercher index.php, puis index.html, et ensuite index.phtml. Si aucun de ces trois fichiers existent, la page 403.php (se trouvant dans la racine) sera affichée pour éviter de lister le répertoire.