.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

À la réception du serveur

Réception du serveur

Quand on reçoit son serveur, tout ce qu’on peut faire c’est de se connecter en ssh avec le nom d’utilisateur fourni à l’hébergeur et avec un mot de passe temporaire (si vous vous connectez directement en root, passez directement au changement du mot de passe root). La première chose à faire est donc de changer son mot de passe :

$ passwd

On vous demande de re-saisir l’ancien et de taper deux fois le nouveau. Choisissez un mot de passe solide (lettres majuscule et minuscule, symboles et chiffres, au moins 10 caractères) car ssh est la principale porte d’accès à votre serveur.

Ensuite, on se connecte en root pour pouvoir agir sur la machine :

$ su

Il faut maintenant saisir le mot de passe root temporaire que vous avez fourni à l’hébergeur.

Ensuite, on change le mot de passe root :

# passwd

Encore une fois, il faut re-saisir l’ancien et de taper deux fois le nouveau. Il faut trouver un nouveau mot de passe différent de celui de l’utilisateur et tout aussi solide.

Il est possible que vous n’ayez pas d’utilisateur autre que root sur votre machine. Dans ce cas, changez le mot de passe root et créez un autre utilisateur toto :

# adduser toto

Puis on donne comme répertoire à l’utilisateur toto, celui où on mettra les sites (/var/www):

# usermod -d /var/www toto -m

Enfin, on installe vim pour pouvoir éditer plus facilement les fichiers :

# apt-get install vim

Je n’arrivais pas à utiliser correctement vi, sans doute à cause de l’encodage des caractères. Avec vim tout marche pour le mieux.

Htop

Aperçu de htop

htop est un petit outils qui permet d’avoir une vue globale sur l’état du serveur. C’est une version plus jolie de top donnant accès à l’utilisation des processeurs et de la mémoire. On visualise également tous les processus actif sur le serveur. Il est possible de les classer en fonction de différents critères et aussi de les tuer.

Pour installer htop :

# apt-get install htop

Et ensuite pour le lancer :

# htop

htop est complètement configurable en tapant sur « F2 » (SETUP).

Il y aurait beaucoup de choses à dire sur htop. Une chose peut-être plus utile : la signification de Load average. Le premier nombre indique la moyenne de la charge sur une minute, le second sur cinq minutes et le troisième sur quinze minutes. En gros il faut s’inquiéter si le Load average est supérieur au nombre de processeurs.

Sources

Load averge – Wikipedia

Supprimer les services inutiles

Utilisation de sysv-rc-conf

Lorsqu’on installe une Debian, il y a des certains services donc nous n’avons pas besoin. J’ai pour le moment supprimé nfs, portmap et bind. Je n’ai pas besoin de bind car j’utilise les DNS de mon registrar.

D’abord on stoppe les démons correspondants :

# /etc/init.d/portmap stop
# /etc/init.d/nfs-common stop
# /etc/init.d/bind9 stop

Puis ensuite on empêche que ces services soient relancés au démarrage.

# update-rc.d -f portmap remove
# update-rc.d -f nfs-common remove
# update-rc.d -f bind9 remove

Pour aller plus loin, il existe deux utilitaires « graphiques » permettant de gérer les services lancés au démarrage : rcconf et sysv-rc-conf.

Sources

Theos.in

Minifier le CSS et le JS

Aperçu de CleanCss.com

Minifier son code CSS ou Javascript permet d’alléger le poids des fichiers envoyés par le serveur, et donc d’avoir une page qui se charge plus rapidement. J’ai une préférence pour les minifieurs peu intrusifs, c’est-à-dire qui enlève les espace, les commentaires et font des modifications basiques. Cela évite d’avoir des mauvaises surprises, mais bien sur le gain n’est que de l’ordre de 25%.

Il est possible d’utiliser en local ou sur le serveur un programme comme YUI Compressor pour faire cela. Mais je me suis limité à une minification en ligne avec ces deux sites :

À chaque fois que je modifie un fichier js ou css, je le fais passer par l’un de ces outils avant de l’envoyer sur le serveur en production.

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.