.htaccess : comment ne plus l’utiliser sur son serveur dédié

On prend souvent l’habitude d’utiliser les fichiers .htaccess sur les serveurs mutualisés. Or il n’y a plus aucune raison de les utiliser sur un dédié. En effet, les fichiers .htaccess n’existent que pour permettre aux utilisateurs qui ne sont pas administrateur du serveur de faire des changements de configuration. Donc lorsqu’on a son dédié, plus besoin de .htaccess ! Il faut remplacer tous les .htaccess par des directives dans les fichiers de configuration d’Apache.

Pourquoi ?

Quel est l’intérêt de s’en passer puisque ça marche très bien avec ? Il y a trois raisons :

La rapidité. Pour prendre en compte les fichiers .htaccess, le serveur doit avoir l’option AllowOverride d’activée. Il va donc chercher à chaque chargement de fichier les fichiers .htaccess dans toute l’arborescence. Cela prend du temps. De plus le fichier .htaccess est chargé à chaque fois ce qui fait également perdre du temps.

La sécurité. La directive AllowOverride All permet à l’aide d’un fichier .htaccess de modifier localement la configuration du serveur. Si on peut éviter cette souplesse de configuration la sécurité n’en sera que meilleure.

La maintenance. En supprimant tous les fichiers .htaccess, on peut regrouper toutes les directives dans un même fichier de conf. Cela simplifie grandement la maintenance des règles de ré-écriture par exemple.

Comment ?

Il faut remplacer un à un les fichiers .htaccess par une section Directory dans un fichier de conf de apache (/etc/apache2/apache2.conf par exemple, ou le fichier de conf du virtualHost).
Si par exemple on a un fichier .htaccess dans le répertoire /var/www/monsite.fr qui contient les directives suivantes :

RewriteCond %{HTTP_HOST} ^monsite\.fr [NC]
RewriteRule (.*) http://www.monsite.fr/$1 [QSA,R=301,L]

Il suffit de supprimer ce fichier .htaccess et de rajouter ce bloc dans un fichier de conf d’Apache :

‹Directory /var/www/monsite.fr›
   RewriteCond %{HTTP_HOST} ^monsite\.fr [NC]
   RewriteRule (.*) http://www.monsite.fr/$1 [QSA,R=301,L]
‹/Directory›

Lorsqu’on a remplacé tous les fichiers .htaccess, on peut ajouter la directive :

AllowOverride None

dans une section Directory. Cette directive est par défaut à All. Par exemple, si j’ai remplacé tous les fichiers .htaccess de monsite.fr, je rajoute la directive comme ceci :

‹Directory /var/www/monsite.fr›
   AllowOverride None
   ...
‹/Directory›

Comme ça, Apache ne perdra plus de temps à aller chercher les fichiers .htaccess. De plus la configuration est chargée une seule fois au démarrage d’Apache et plus à chaque requête sur un fichier.

Sources

Apache.org – Utilisation du .htaccess

Installer Awstat sur Debian squeeze

Traffic horaire avec Awstats

Awstats est un logiciel qui génère des statistiques web à partir des logs du serveur. Contrairement à un analyseur basé sur JavaScript (comme Google Analytics ou Xiti) Awstats ne rate aucun visiteur, il donne des informations exhaustives. Contrairement à un analyseur php (comme phpMyVisit)  il n’est pas une charge supplémentaire pour votre serveur puisque vous le faites travailler quand vous voulez et de manière très brève (moins de 30 secondes par jour pour un site raisonnable).

De plus Awstats donne des informations plus orientées serveur (hits, types de fichiers, bande passante, erreurs 404…) il est donc très utile pour un administrateur.

Bien sur il est toujours utile d’avoir simultanément un analyseur Javascript pour avoir des informations plus élaborées mais le fait d’avoir son analyseur en local est tout de même rassurant.

Nous allons donc installer Awstats sur une Debian Squeeze. Nous supposons que le domaine qui nous intéresse est domaine.tld et que notre site est situé dans le répertoire /var/www/domaine.tld/.

On suppose également que vos fichiers log sont dans le répertoire /var/log/apache2/ et qu’ils sont sous la forme domaine.access.log avec le format combined.

Installation

Avant toute chose, nous allons créer un sous-dossier par lequel nous allons accéder aux statistique Awstats :

# mkdir /var/www/domaine.tld/stats/

Puis, il faut installer le paquet Awstats :

# apt-get install awstats

Ensuite, on crée un fichier de configuration à partir d’un modèle :

# cp /etc/awstats/awstats.conf /etc/awstats/awstats.domaine.tld.conf

On édite ce fichier de conf :

# vi /etc/awstats/awstats.domaine.tld.conf

On y change les lignes suivantes (les trouver dans le fichier) :

LogFile="/usr/share/awstats/tools/logresolvemerge.pl /var/log/apache2/domaine.access.log.1 /var/log/apache2/domaine.access.log |"
LogFormat=1
SiteDomain="domaine.tld"
HostAliases="localhost 127.0.0.1 www.domaine.tld domaine.tld"
DNSLookup=0
DirIcons="awstats-icon"

Ici, Awstats va analyser le fichier de log courant ainsi que le précédent. Ça double le temps d’analyse, mais ça permet d’éviter de perdre des lignes de log au moment de la rotation. c’est pas très fin, mais c’est simple et infaillible.
On décommente également les lignes suivantes (vers la fin du fichier) :

LoadPlugin="decodeutfkeys"
LoadPlugin="geoip GEOIP_STANDARD /usr/share/GeoIP/GeoIP.dat"

Le premier plugin permet de gérer l’UTF-8 et le deuxième permet de connaître le pays d’origine de vos visiteurs.
On fait un lien pour avoir les images d’Awstats :

# ln -s /usr/share/awstats/icon/ /var/www/domaine.tld/stats/awstats-icon

On installe le module perl geo-ip et aussi celui pour décoder l’utf-8 :

# apt-get install libgeo-ip-perl liburi-perl

On récupère la base de données Geo-ip :

# cd /usr/share/GeoIP
# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
# gunzip -f GeoIP.dat.gz

Voilà, Awstats est près à fonctionner, il ne reste plus qu’à savoir s’en servir.

Utilisation

Pour utiliser Awstats, il faut passer par deux étapes :

  1. Mettre à jour la base d’Awstats à partir des fichiers de Log.
  2. Générer les pages HTML pour visualiser les stats.

Première grosse mise à jour (à ne faire qu’une fois, ça peut prendre plusieurs minutes) :

# perl /usr/lib/cgi-bin/awstats.pl -config=domaine.tld -LogFile="/usr/share/awstats/tools/logresolvemerge.pl /var/log/apache2/domaine.access.log* |" -update

Pour les mises à jour quotidiennes :

# perl /usr/lib/cgi-bin/awstats.pl -config=domaine.tld -update

Pour construire les pages :

# perl /usr/share/awstats/tools/awstats_buildstaticpages.pl -config=domaine.tld -lang=fr -awstatsprog=/usr/lib/cgi-bin/awstats.pl -dir=/var/www/domaine.tld/stats/

Voilà, maintenant vous avez vos stats qui vous attendent à l’adresse suivante : http://domaine.tld/stats/awstats.domaine.tld.html

Pour finir, on automatise tout ça en créant une tâche cron qui fait ça toutes les nuits.

Automatisation

On crée un fichier update-awstats.sh pour regrouper les deux commandes de mise à jour :

# vi /root/script/update-awstats.sh

(Si vous n’avez pas de répertoire script, créez-le)
Dans ce fichier on met les deux commandes suivantes :

perl /usr/lib/cgi-bin/awstats.pl -config=domaine.tld -update
perl /usr/share/awstats/tools/awstats_buildstaticpages.pl -config=domaine.tld -lang=fr -awstatsprog=/usr/lib/cgi-bin/awstats.pl -dir=/var/www/domaine.tld/stats/

On rend le fichier exécutable :

# chmod +x /root/script/update-awstats.sh

Et enfin on crée une tâche cron pour exécuter cette commande toutes les nuits :

# crontab -e

Et dans le fichier rentrer les lignes suivantes :

# Awstats : tous les jours à 5h00
00 5 * * * /root/script/update-awstats.sh

Normalement vous aurez maintenant toujours des stats à jour.