Installation Apache + PHP + PhpMyAdmin Remarques : ----------- * Les commandes précédées de "$" doivent être exécutées en tant qu'utilisateur général et non en tant qu'utilisateur root. * Les commandes précédées de "#" exigent que vous travailliez en tant qu'utilisateur root. * Les lignes précédées de "#" représentent des commentaire à ne pas confondre donc à une ou des cmmandes. 1./ Pour installer Apache2 sous Debian, on tape la commande suivante : ~# aptitude install apache2 mysql-server php5 phpmyadmin Cela installera automatiquement apache2 + php + modules d'apache pour PHP et MySQL + PhpMyAdmin. Pour accéder à PhpMyAdmin, il faut se rendre à la page http://localhost/phpmyadmin ou http://IP_de_votre_VM/phpmyadmin Problème d'encodage d'apache2 Si vous rencontrez un problème d'encodage des caractères de vos pages, par exemple les caractères accentués apparaissant sous la forme "�" (), c'est probablement parce qu'Apache2 déclare dans les en-têtes HTTP qui accompagnent les pages visionnées un encodage par défaut en Unicode (UTF-8) : Content-Type: text/html; charset=UTF-8 Tandis que les pages visionnées utilisent un autre encodage des caractères, comme par exemple Latin1 (ISO-8859-1). Même si vos documents indiquent le jeu de caractères utilisé, le paramètre donné par le serveur dans les en-têtes HTTP est prioritaire ! Pour corriger ce problème, il faudra éditer /etc/apache2/apache2.conf : ~$ sudo nano /etc/apache2/apache2.conf Encodage par défaut en Latin1 (ISO-8859-1) Cherchez la ligne suivante : #AddDefaultCharset ISO-8859-1 Décommentez-la en enlevant le # : AddDefaultCharset ISO-8859-1 Pour ceux qui ont la locale iso-8859-15 (sinon vous pouvez faire "sudo dpkg-reconfigure locales" pour l'ajouter) et qui désirent l'utiliser par défaut, ajoutez un 5 en fin de ligne : AddDefaultCharset ISO-8859-15 ainsi que la ligne suivante dans le paragraphe en-dessous : AddCharset ISO-8859-15 .iso8859-15 .latin15 .fr Il ne vous reste plus qu'à mettre "fr" en première position dans la ligne LanguagePriority (juste au-dessus), et à demander à apache de relire sa configuration : $ sudo service apache2 reload Aucun encodage par défaut Il est également possible de s'affranchir de tout encodage par défaut, de la manière suivante : Cherchez la directive AddDefaultCharset : AddDefaultCharset ISO-8859-1 Remplacez l'attribut par la valeur Off : AddDefaultCharset Off Là encore, on demandera à Apache de relire sa configuration : $ sudo service apache2 reload Maintenant, les en-têtes HTTP ne contiendront plus d'indication d'encodage des caractères. Attention : il faudra alors que chaque page indique l'encodage utilisé, car s'en remettre à la détection automatique par les navigateurs peut s'avérer assez aléatoire ! 2./ Configuration de Apache2 Le fichier de configuration principal de Apache2 est /etc/apache2/apache2.conf. Dans le cas de Apache version 1.3, ce fichier s'appelle /etc/apache/httpd.conf. Par défaut, Apache utilise deux fichiers de logs : /var/log/apache2/access.log : contient les logs de connexion au serveur Web /var/log/apache2/error.log : contient les erreurs survenues Dans les fichiers de configuration /etc/apache2/apache2.conf ou /etc/apache2/conf.d/security, on peut être amené à modifier : # Pour que Apache ne donne pas son numéro de version et les modules chargés (via une page d'erreur) ServerSignature off # Pour que Apache ne donne pas son numéro de version et les modules chargés (via le protocole HTTP) ServerTokens Prod # Permet d'enregistrer les noms canoniques au lieu des adresses IP dans le fichier access.log HostnameLookups On Le fichier /etc/apache2/ports.conf contient la liste des ports sur lequel Apache écoute. On peut changer le port le par défaut (80), ou lui indiquer d'écouter sur d'autres ports (ex: 443 pour https) en rajoutant des lignes Listen . ~# cat /etc/apache2/ports.conf Listen 80 3./ Créer son site Placez vos fichiers php et html dans /var/www pour qu'ils deviennent le site de votre machine (celui disponible à l'adresse http://nom_ou_ip_de_votre_machine/) Créer sa page utilisateur Placez vos fichiers php et html dans un sous-répertoire "public_html" de votre répertoire utilisateur pour qu'ils deviennent votre site utilisateur (celui disponible à l'adresse http://nom_ou_ip_de_votre_machine/~votre_login/) Permettre l'utilisation de fichiers dans le "~/public_html" Il faut activer le module userdir : sudo a2enmod userdir sudo service apache2 reload 4./ Héberger plusieurs sites Internet Apache permet de gérer plusieurs sites internet sur le même serveur, pour cela on va utiliser des sections VirtualHost. Il y a deux types principaux d'hébergement virtuel: fondé sur le nom, et fondé sur l'adresse IP. L'hébergement virtuel fondé sur le nom utilise le nom d'hôte présenté par le client. Cela économise des adresses IP, et le surplus d'administration nécessaire, mais cela suppose que le protocole servi puisse fournir le nom d'hôte à un endroit approprié. En particulier, on rencontre des difficultés importantes quand on utilise l'hébergement virtuel fondé sur le nom avec SSL/TLS. L'hébergement virtuel fondé sur l'adresse IP utilise une adresse IP séparée pour chaque nom d'hôte, et peut être envisagée avec n'importe quel protocole, mais nécessite une adresse IP dédiée pour chaque nom de domaine servi. L'hébergement virtuel fondé sur le numéro de port est également possible en principe, mais est rarement utilisé en pratique car peu ergonomique pour les utilisateurs. On peut combiner les hébergements virtuels fondés sur le nom et l'adresse IP: un serveur peut avoir plusieurs adresses IP et servir plusieurs noms sur une partie ou la totalité de ces adresses IP. Cette technique peut être utile quand on utilise SSL/TLS avec des certificats communs à plusieurs sous-domaines (wildcard certificates). Par exemple, si un opérateur de serveurs a deux certificats, un pour *.example.com et un pour *.example.net, il pourrait servir foo.example.com et bar.example.com à partir de la même adresse IP, mais aurait besoin d'une adresse IP séparée pour baz.example.net. Pour chaque site Internet, on crée un nouveau fichier dans /etc/apache2/sites-available et on lui indique la section VirtualHost (voir ci-dessous). Par convention, on appelle ce fichier avec le nom du site Internet : ~# cd /etc/apache2/available ~# vi www.mondomaine.dj ~# Ne mettre cette ligne que dans UN seul fichier NameVirtualHost 10.10.0.x ServerName www.mondomaine.dj ServerAlias mondomaine.dj ServerAdmin webmaster@mondomaine.dj DocumentRoot /var/www/www.mondomaine.dj CustomLog /var/log/apache2/www.mondomaine.dj_access.log combined ErrorLog /var/log/apache2/www.mondomaine.dj_error.log Les différents sites vont être stockés dans le répertoire /var/www.On va créer un sous-répertoire par site : ~# cd /var/www ~# mkdir www.mondomaine.dj Afin de tester, on crée une page HTML minimale : ~# echo "www.mondomaine.dj" > /var/www/www.mondomaine.dj/index.html Après toutes modifications des fichiers de configuration, on relance Apache2 avec la commande suivante : ~# service apache2 reload On peut tester avec son navigateur en se connectant à l'URL suivante : http://www.mondomaine.dj Dans cet exemple, il faut bien entendu que www.mondomaine.dj pingue vers notre serveur. On peut simuler ceci en rajoutant une entrée dans le fichier /etc/hosts ou en modifiant le DNS. 5./ Installer des modules supplémentaires Apache 2 permet l'installation de nombreux modules pour offrir plus de services ou pour renforcer la sécurité. Les modules sont dans le répertoire /etc/apache2/mods-available . C'est ici qu'il faut copier les modules additionnels que vous pourrez télécharger pour Apache. Pour activer un module on peut créer manuellement un lien symbolique dans le répertoire mods-enable Par exemple pour activer le mod URL Rewriting EX : ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load Une alternative consite à utiliser la commande a2enable / a2disable Ex: a2enable mod_rewrite // Active le mod_rewrite dans apache2 Ex: a2disable mod_rewrite // Désactive le mod_rewrite dans apache2 NB : sur les dernières versions de apache2, ces deux commandes s'appellent respectivement a2enmod et a2dismod. Protéger un répertoire avec un login / mot de passe 6./ Pour protéger un répertoire avec un login et un mot de passe, on crée dans le répertoire à protéger un fichier .htaccess qui contient le code suivant : ~# mkdir -p /var/www/www.mondomaine.dj/secret ~# chown www-data.admin /var/www/www.mondomaine.dj/secret ~# cd /var/www/www.mondomaine.dj/secret ~# vi .htaccess # Type d'authentification AuthType Basic # Nom affiché dans la boite d'authentification AuthName "Site à protéger" # Emplacement du fichier contenant les utilisateurs AuthUserFile /etc/apache2/utilisateurs # Emplacement du fichier contenant les groupes AuthGroupFile /etc/apache2/groupes ~# On autorise seulement les membres du groupe admin Require Group admin On crée ensuite le fichier /etc/apache2/utilisateurs à l'aide de la commande htpasswd : La première fois, on utilise l'option -c de la commande htpasswd pour créer le fichier. ~# cd /etc/apache2 ~# htpasswd -c utilisateurs alex ~# htpasswd utilisateurs pierre ~# htpasswd utilisateurs marie On crée ensuite le fichier /etc/apache2/groupes : ~# echo "admin: alex pierre" > /etc/apache2/groupes Il faut également éditer le fichier /etc/apache2/sites-available/fichier_de_conf_de_votre_site afin d'activer la prise en charge du fichier htaccess. Ajouter, si cela n'existe pas encore : ... AllowOverride All ... On relance le serveur web : ~# service apache2 reload Puis on tent d'y accéder via le navigateur, un nom d'utilisateur et un mot de passe me sera demandé pour accéder au dossier sinon un message d'erreur s'affichera. 7./ Outils pour générer des statistiques de connexion Chaque fois qu'un visiteur vient sur le site Internet, Apache enregistre sa connexion dans les fichiers /var/log/apache2/*_access.log. Voici deux logiciels libres qui analysent ces fichiers et qui permettent de générer des statistiques sur les connexions : Awstats : http://awstats.sourceforge.net/ Webalizer : http://www.mrunix.net/webalizer/