FreeBSD - Nginx, MongoDB, Python, Postgres, Node.js

Installation nginx

Par défaut, les options de configuration de nginx ne permettent pas de déployer un vhost en https ou encore la compression gzip. Il faudra donc compiler ce logiciel et ajouter le(s) module(s) dont vous avez besoin.

portmaster www/nginx

Pour que nginx démarre automattiquement au démarrager, dans /etc/rc.conf, ajouter :

nginx_enable=YES

Installation MongoDB

Le point important à savoir ici est que spidermonkey n'est pas configuré avec le support de l'UTF8 par défaut. Il vous faudra donc compiler ce paquet pour que MongoDB ne râle pas.

portmaster lang/spidermonkey

Puis :

portmaster databases/mongodb

Pour que MongoDB démarre automattiquement au démarrager, dans /etc/rc.conf, ajouter :

mongod_enable=YES

Installation Postgres

Simple et trivial ; à noter tout de même que 4 versions de Postgres sont proposés : 8.3, 8.4, 9.0 et 9.1

portmaster databases/postgresql91-server

Pour initialiser le serveur Postges :

/usr/local/etc/rc.d/postgresql initdb

Pour que Postgres démarre automattiquement au démarrager, dans /etc/rc.conf, ajouter :

postgresql_enable=YES

Installation Node.js

portmaster www/node

Installation Python

Là encore, le choix est large au niveau des versions : 2.4, 2.5, 2.6, 2.7 (version par défaut ?), 3.1 et 3.2

portmaster lang/python27

Pour récupérer pip et autres librairies, il faut aller les chercher dans devel/py-*

Par exemple pour récupérer pip et virtualenvwrapper :

portmaster devel/py-pip devel/py-virtualenvwrapper

Par contre, pour des frameworks comme Django ou Flask, il faut aller voir du coté de www/py-django et www/py-flask, sauf à ce qu'ils soient installés dans votre environnement 'virtualenv' via pip justement. A tout hasard :

portmaster www/py-django www/py-flask

Installation DVCS

portmaster devel/git (ou) devel/mercurial
Learn more »

Configurer un serveur DNS (Bind)

Ce tutoriel explique, dans le cadre de la mise en place d’un Serveur Privé Virtuel chez Lycos, comment j’ai mis en place mon propre serveur DNS

Installation

Il suffit de procéder de la façon suivante :

aptitude update
aptitude install bind9

Configuration

Dans cet exemple : * vous avez déjà créé votre 1er vhost avec Apache * votre domaine est : monsite.com * l’ip de votre serveur est : 100.100.100.100 * vous utilisez le dns secondaire fourni par Gandi (ns6.gandi.net)

Solution 1 : Gestion via Webmin

Ouvrez Webmin

Si webmatin n’est pas installé :

aptitude update
aptitude install webmin webmin-bind
/etc/init.d/webmin start
Ensuite :

Créer une nouvelle zone primaire

  • Cliquer sur "Créer une nouvelle zone primaire"
  • Dans "Nom de domaine / réseau" entrez : "monsite.com"
  • Dans "Serveur primaire" entrez : "ns1.monsite.com"
  • Dans "Adresse électronique" entrez : votre email pour contact admin du dns
  • Cliquer sur créer

Bloc "Adresse"

  • Cliquer sur "Adresse" :
  • Dans "Nom" entrez : "www"
  • Dans "Adresse" entrez : "100.100.100.100"
  • Cliquer sur créer
  • Recommencer l’opération x fois en entrant dans nom : "ns1", "ftp", "mail", "pop", "smtp", etc et une fois en laissant "nom" vide.
  • Une fois fini cliquer sur "Retourner à Type d’enregistrement"

Bloc "Serveur de nom"

  • Cliquer sur "Serveur de nom"
  • Dans "Nom de zone" : laisser vide
  • Dans "Serveur de nom" entrez le dns secondaire : "ns1.monsite.com"
  • Cliquer sur Créer
  • Dans "Nom de zone" : laisser vide
  • Dans "Serveur de nom" entrez le dns secondaire : "ns6.gandi.net"
  • Une fois fini cliquer sur "Retourner à Type d’enregistrement"

Bloc "Serveur de courrier"

  • Cliquer sur "serveur de courrier" :
  • Dans "Nom " : laisser vide
  • Dans "Serveur de courrier" entrez "mail.monsite.com."
    • ne pas oublier de mettre le "." à la fin
    • NB : à condition d’avoir créer le sous domaine mail plus haut
  • Dans "Priorité" entrez : "10"
  • Cliquer sur créer
  • Une fois fini cliquer sur "Retourner à Type d’enregistrement"

Redémarrez Bind :

/etc/init.d/bind restart

Solution 2 : Gestion en console

FIXME

Déclaration de votre serveur DNS auprès de votre registar

Une fois cela fait il faut déclarer votre serveur ns1.monsite.com comme serveur DNS auprès de votre registrar.

Par exemple si "monsite.com" est chez gandi, dans la section de configuration des DNS :
  • Champ de gauche entrez "ns1.mondomaine.com"
  • Champ de droite entrez l’ip de votre serveur, dans notre ex "100.100.100.100"
Pour le serveur secondaire, il suffit de faire de même ;-)
  • Champ de gauche : entrez "ns6.gandi.net"
  • Champ de droite : laissez vide

Résultat

/etc/bind/named.conf.local :

zone "monsite.com" {
    type master;
    file "/var/cache/bind/monsite.com.hosts";
    };

/var/cache/bind/monsite.com.hosts :

$ttl 38400
monsite.com.   IN      SOA     ns1.monsite.com. root.monsite.com. (
                       1105498423
                       10800
                       3600
                       604800
                       38400 )
monsite.com.           IN      NS      ns1.monsite.com.
www.monsite.com.       IN      A       100.100.100.100
monsite.com.           IN      A       100.100.100.100
smtp.monsite.com.      IN      A       100.100.100.100
ftp.monsite.com.       IN      A       100.100.100.100
mail.monsite.com.      IN      A       100.100.100.100
monsite.com.           IN      NS      ns6.gandi.net.
monsite.com.           IN      MX      10 mail.monsite.com.
ns1.monsite.com.       IN      A       100.100.100.100

Et ensuite...

Il vous suffit / faut attendre que la propagation des DNS se fasse (de quelques minutes à 48h maxi)

View details »

Externaliser votre configuration PHP

Depuis les dernières version de PHP 5 (et PHP 4?) disponibles dans Debian/Ubuntu, un petit répertoire conf.d est apparu dans /etc/php5 :

nicolas@tetram:/etc/php5$ ls -alR
.:
total 20
drwxr-xr-x   5 root root 4096 2007-06-08 20:47 .
drwxr-xr-x 112 root root 4096 2007-06-13 08:44 ..
drwxr-xr-x   2 root root 4096 2007-06-08 20:51 apache2
drwxr-xr-x   2 root root 4096 2007-06-08 20:51 cli
drwxr-xr-x   2 root root 4096 2007-06-08 20:51 conf.d

./apache2:
total 52
drwxr-xr-x 2 root root  4096 2007-06-08 20:51 .
drwxr-xr-x 5 root root  4096 2007-06-08 20:47 ..
lrwxrwxrwx 1 root root     9 2007-06-08 20:46 conf.d -> ../conf.d
-rw-r--r-- 1 root root 43433 2007-06-08 20:51 php.ini

./cli:
total 52
drwxr-xr-x 2 root root  4096 2007-06-08 20:51 .
drwxr-xr-x 5 root root  4096 2007-06-08 20:47 ..
lrwxrwxrwx 1 root root     9 2007-06-08 20:47 conf.d -> ../conf.d
-rw-r--r-- 1 root root 43435 2007-06-08 20:51 php.ini

./conf.d:
total 28
drwxr-xr-x 2 root root 4096 2007-06-08 20:51 .
drwxr-xr-x 5 root root 4096 2007-06-08 20:47 ..
-rw-r--r-- 1 root root   50 2007-05-22 21:06 gd.ini
-rw-r--r-- 1 root root   57 2007-05-22 21:06 mysqli.ini
-rw-r--r-- 1 root root   56 2007-05-22 21:06 mysql.ini
-rw-r--r-- 1 root root   52 2007-05-22 21:06 pdo.ini
-rw-r--r-- 1 root root   60 2007-05-22 21:06 pdo_mysql.ini

Si vous installer APC, ]r exil vous faut normalement ajouter la ligne suivante dans votre/vos fichier(s) php.ini

extension = apc.so

Maintenant, plus besoin d'éditer vos fichiers php.ini. Il vous suffit de créer un fichier apc.ini dans /etc/php5/conf.d contenant la ligne suivante et le tour est joué :

extension = apc.so

Et ainsi le module APC (dans notre exemple) est disponible (dans mon cas) pour php utilisé avec apache2 et php en ligne de commande.

View details »

Gérer vos sous-domaines automatiquement sous Apache et Bind

Marre de déclarer votre sous domaine dans Bind et de créer un virtualhost pour chaque sous-domaine ? Voici la solution pour que le dossier toto placer au bon endroit vous donne toto.domaine.tld...

Gestion automatique dans Bind

Dans votre configuration Bind, il vous faut une ligne :

* IN A xxx.xxx.xxx.xxx

xxx.xxx.xxx.xxx est l’ip de votre serveur.

L’étoile permet ainsi de dire que tout url en *.domaine.tld est gérée par le serveur.

Par contre, pour les sous-domaines techniques utilisés pour la déclaration des serveurs NS ou MX, il est recommandé de les déclarer explicitement. La gestion automatique n’empêche pas la déclaration de certains sous-domaines.

Vous obtenez ainsi qqc du genre :

$ttl 38400 domaine.tld. IN SOA ns1.domaine.tld. tech.domaine.tld. (
    2006082301
    10800
    3600
    604800
    38400 )
domaine.tld. IN NS ns1.domaine.tld.
domaine.tld. IN NS ns2.domaine.tld.
domaine.tld. IN MX 10 mail.domaine.tld.
www IN A xxx.xxx.xxx.xxx
mail IN A xxx.xxx.xxx.xxx
dns IN A xxx.xxx.xxx.xxx
    IN A xxx.xxx.xxx.xxx
* IN A xxx.xxx.xxx.xxx

Note : dans webmin, il est interdit par défaut d’utiliser des wildcard (les fameuses "*"). Il faut aller dans la configuration du module pour l’autoriser...

Génération automatique des domaines dans Apache

Il vous faut installer le module vhost_alias :

Note : j’utilise Apache2, pour Apache 1.x il vous faudra vous référencer à la doc adéquat.

a2enmod vhost_alias
/etc/init.d/apache2 reload

Il vous reste ensuite à ajouter une directive VirtualDocumentRoot et ServerAlias dans la configuration de votre VirtualHost comme dans l’ex suivant :

<VirtualHost xxx.xxx.xxx.xxx:80>
    DocumentRoot /home/web/domaine.tld/www
    ServerName domaine.tld
    ServerAlias *.domaine.tld
    VirtualDocumentRoot /home/web/domaine.tld/%1
    CustomLog /var/log/apache2/domaine.tld/access.log combined
    ErrorLog /var/log/apache2/domaine.tld/error.log
</VirtualHost>

Relancez apache :

/etc/init.d/apache2 reload

et le tour est joué.

Ainsi, si j’ajoute un répertoire "toto" dans /home/web/domaine.tld/ alors automatiquement http://toto.domaine.tld est disponible.

Pour que http://domaine.com ne vous renvoie pas une erreur 404, car apache cherche alors /home/web/domaine.com/domaine qui n’existe pas, il vous faut faire la manipulation suivante :

ln -s /home/web/domaine.tld/www /home/web/domaine.tld/domaine

Magique, non ?

View details »

Installation et paramétrage du moteur de statistiques awstats

Ce tutoriel explique comment installer et paramétrer awstats afin de connaître l’audience de votre site.

Avant-propos

Mes données sont organisées de la façon suivante : * le site est dans /home/web/domaine.tld/www * le fichier de log d’accès est /var/log/apache/access.domaine.tld.log * les rapports de stats sont dans /home/web/domaine.tld/stats

Installation de awstats

aptitude update
aptitude install awstats

Création du répertoire de stockage des rapports awstats

Il vous suffit de créer un répertoire stats et de donner des droits sur ce répertoire :

mkdir /home/web/domaine.tld/stats
chmod 777 /home/web/domaine.tld/stats

Dans ce répertoire seront stockés les données d’awstats

Paramétrage de awstats

Rendez vous dans /etc/awstats :

cd /etc/awstats

Copiez le fichier awstats.conf en awstats.domaine.tld.conf (domaine.tld est à adapter selon votre domaine bien sur... ;) )

cp awstats.conf awstats.domaine.tld.conf

Editez awstats.domaine.tld.conf avec vi/vim (ou autre éditeur de votre choix : nano, joe, etc) :

vi awstats.domaine.tld.conf

Dans ce fichier, il vous faut adapter les valeurs suivantes :

LogFile="/var/log/apache/access.log"
devient :
LogFile="/var/log/apache/access.domaine.tld.log"

SiteDomaine=""
devient
SiteDomain="domaine.tld"

HostAliases="localhost 127.0.0.1"
devient :
HostAliases="localhost 127.0.0.1 www.domaine.tld"

DirData="/var/lib/awstats"
devient :
DirData="/home/web/domaine.tld/stats"

URLWithQuery=0
devient :
URLWithQuery=1

Générer votre premier rapport

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

Générer votre rapport tous les matins à 6h (tâche cron)

Editez votre crontab :

crontab -e

ajoutez la ligne suivante :

0 6 * * * /usr/lib/cgi-bin/awstats.pl -config=domaine.tld -update >/dev/null

Mise en place du cgi

Assurez-vous d’avoir la directive suivante dans votre virtual host apache. Au besoin, rajoutez-les :

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

Si vous les avez rajouté, n’oubliez pas de relancer Apache :

/etc/init.d/apache reload

Ajoutez les icones à votre rapport

Il suffit de créer un simple lien symbolique :

ln -s /usr/share/awstats/icon /home/web/domaine.tld/www/awstats-icon

Accédez à vos stats...

Rendez vous sur : http://www.domaine.tld/cgi-bin/awstats.pl?config=domaine.tld

Et voilà...

Si vous avez plusieurs domaines, il vous suffit de répéter les mêmes étapes depuis le début ;)

View details »

Installer APC sous Apache 1.x / 2.x

Ce tutoriel explique comment installer l’accélérateur APC sous Apache 1 et 2.

Installer APC pour Apache 1

Installer PEAR/PECL

Il est possible d’installer APC via PEAR ou plutôt par PECL.

Pour cela il vous faut installer d’autres petites choses :

sudo aptitude install apache-dev php5-dev php5-cli php-pear

Installer APC

sudo pecl install -a apc

Il suffit de répondre "yes" au deux questions posées

Paramétrage

Il ne vous reste plus qu’à ajouter dans /etc/php5/conf.d/apc.ini :

extension=apc.so

et relancer apache :

sudo /etc/init.d/apache restart

Créer et appeller votre fichier phpinfo.php, une section apc doit apparâitre...

<?php phpinfo(); ?>

Vous pouvez peaufiner le tout en regardant du coté des paramètres d’APC.

Installation d'APC sous Apache 2

Installer PEAR/PECL

Il est possible d’installer APC via PEAR ou plutôt par PECL.

Pour cela il vous faut installer d’autres petites choses :

sudo aptitude install apache2-threaded-dev php5-dev php5-cli php-pear

Mise en place d'un lien symbolique de apxs2 vers apxs

L'installateur d'APC est conçu pour apache1 et non apache2. En conséquence, il ne sait pas gérer l'appel à apxs2 en lieu et place d'apxs. La solution consiste à faire un lien symbolique d'apxs vers apxs2 :

sudo ln -s /usr/bin/apxs2 /usr/bin/apxs

Installer APC

sudo pecl install -a apc

Il suffit de répondre "yes" au deux questions posées

Paramétrage

Il ne vous reste plus qu’à ajouter dans /etc/php5/conf.d/apc.ini :

extension=apc.so

et relancer apache :

sudo /etc/init.d/apache2 restart

Créer et appeller votre fichier phpinfo.php, une section apc doit apparaître...

<?php phpinfo(); ?>

Vous pouvez peaufiner le tout en regardant du coté des paramètres d’APC.

View details »

Installer mod_gzip/mod_deflate pour Apache 1.x / 2.x

mod_gzip/mod_deflate permettent de compresser les données envoyées par votre site et donc gagner un peu en rapidité et en bande passante... mod_gzip est disponible pour apache1 et mod_deflate pour apache2 mais ils remplissent les mêmes objectifs.

Installer mod_gzip pour Apache 1.x

Installation

Il suffit de faire :

aptitude update
aptitude install libapache-mod-gzip

Paramétrer mod_gzip

Créez un fichier mod_gzip.conf dans /etc/apache/conf.d/ et ajoutes-y :

<IfModule mod_gzip.c>
    mod_gzip_on Yes
    mod_gzip_can_negotiate Yes
    mod_gzip_static_suffix .gz
    AddEncoding gzip .gz
    mod_gzip_update_static No
    mod_gzip_command_version '/mod_gzip_status'
    mod_gzip_temp_dir /tmp
    mod_gzip_keep_workfiles No
    mod_gzip_minimum_file_size 500
    mod_gzip_maximum_file_size 500000
    mod_gzip_maximum_inmem_size 60000
    mod_gzip_min_http 1000
    mod_gzip_handle_methods GET POST
    mod_gzip_item_exclude reqheader "User-agent: Mozilla/4.0[678]"
    mod_gzip_item_include file .html$
    mod_gzip_item_include file .shtml$
    mod_gzip_item_include file .htm$
    mod_gzip_item_include file .shtm$
    mod_gzip_item_include file .php$
    mod_gzip_item_include file .phtml$
    mod_gzip_item_exclude file .js$
    mod_gzip_item_exclude file .css$
    mod_gzip_item_include file .pl$
    mod_gzip_item_include handler ^cgi-script$
    mod_gzip_item_include mime ^text/html$
    mod_gzip_item_include mime ^text/plain$
    mod_gzip_item_include mime ^httpd/unix-directory$
    mod_gzip_item_exclude mime ^image/
    mod_gzip_dechunk Yes
    mod_gzip_add_header_count Yes
    mod_gzip_send_vary Yes
</IfModule>

Pour le fichier de référence, voir : http://www.schroepl.net/projekte/mod_gzip/config.htm

Dans /etc/apache/modules.conf, la ligne suivante a du être ajouté automatiquement :

LoadModule gzip_module /usr/lib/apache/1.3/mod_gzip.so

Mise en production

Vérifiez qu’aucune erreur ne s’est glissée dans votre configuration et relancez votre serveur apache :

apachectl configtest
/etc/init.d/apache reload

Tester l’efficience de mod_gzip

Vous pouvez tester cela à l’une des urls suivantes :

Installer mod_deflate pour Apache2

Installation

C’est très simple, y a rien à faire, c’est installé par défaut avec apache2 ;-)

Paramétrage

Dans /etc/apache2/conf.d/mod_deflate.conf, ajoutez :

#
## Mod Deflate
#

<Location />
    # Insert filter
    SetOutputFilter DEFLATE
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
    # Don't compress images
    SetEnvIfNoCase Request_URI \
    \.(?:gif|jpe?g|png)$ no-gzip dont-vary

    # Make sure proxies don't deliver the wrong content
    Header append Vary User-Agent env=!dont-vary
</Location>

Mise en production

Activez les deux modules suivants :

a2enmod headers
a2enmod deflate

Relancez Apache :

/etc/init.d/apache2 restart
View details »

Lighttpd : activez les logs d’erreurs détaillés

Par défaut, dans lighttpd, les logs d’erreurs sont minimalistes (pour ne pas dire inexistants). Voici comment faire apparaître des logs détaillés.

Dans /etc/lighttpd/lighttpd.conf, ajoutez les lignes suivantes :

debug.log-request-header = "enable"
debug.log-response-header = "enable"
debug.log-request-handling = "enable"
debug.log-file-not-found = "enable"

Relancez lighttpd

sudo /etc/init.d/lighttpd force-reload

...et allez faire un tour dans /var/log/lighttpd/ ;-)

View details »

Lighttpd, php5 (cgi), MySQL et fastcgi

Ce tutoriel explique comment installé le serveur web lighttpd et PHP 5.x avec FastCGI, ainsi que MySQL sous Ubuntu (Edgy)

Installation

Note : Assurez vous que vous n’avez pas une instance d’apache qui tourne. Pour qu’Apache et Lighttpd ne se marchent pas dessus au démarrage, il vous faut aussi empêcher le démarrage automatique d’apache :

sudo /etc/init.d/apache stop
sudo update-rc.d -f apache remove

(pour ceux qui utilisent apache2, il suffit de remplacer "apache" par "apache2" dans les lignes ci-dessus.)

Installons lighttpd, php5, FastCGI et MySQL :

sudo aptitude update sudo aptitude install lighttpd php5-cgi libfcgi-dev php5-mysql mysql-server

En vous rendant sur http://localhost/, vous devriez voir la page d’accueil par défaut de lighttpd.

Paramétrage

Activez FastCGI :

sudo lighty-enable-mod fastcgi

Editez le fichier /etc/lighttpd/conf-available/10-fastcgi.conf :

Remplacez :

"bin-path" => "/usr/bin/php4-cgi",

Par :

"bin-path" => "/usr/bin/php5-cgi",

Relancez lighttpd pour tenir compte des changements :

sudo /etc/init.d/lighttpd force-reload

Créez un fichier phpinfo.php dans /var/www :

<?php phpinfo(); ?>

Rendez-vous sur http://localhost/phpinfo.php. Vous devriez voir une belle page apparaître.

Il ne vous reste plus qu’à tester un script avec un peu de code sql pour tester votre connexion à MySQL ;-)

View details »

Mutualisation, ordre et inclusion des fichiers de configuration Apache

Ordre des fichiers de configuration

Une des fonctionnalités intéressante d'Apache d'un point de vue administration est de pouvoir déposer des fichiers de configuration complémentaires sans avoir à toucher au fichier de configuration de base, et ce dans le répertoire /etc/httpd/conf.d/ ou /etc/apache/conf.d suivant la distribution utilisée.

Il faut néanmoins faire attention à un point, les fichiers sont chargés dans l'ordre alphabétique. Par ailleurs, dans une configuration avec une IP utilisant les virtualhost (qui ose ne pas les utiliser ?) il faut que le premier virtualhost chargé contienne la directive NameVirtualHost xxx.xxx.xxx.xxx:yy (ou xxx.xxx.xxx.xxx est votre IP et yy le port le cas échéant)

Il vous faut donc adopter l'ordre suivant :

  1. Fichiers chargeant les modules apache requis pour le(s) site(s)
  2. Fichier chargeant le vhost avec la directive NameVirtualHost xxx.xxx.xxx.xxx:xx
  3. Reste des fichiers de configuration des virtualhosts
  4. Autres fichiers

Cela vous évitera de perdre comme moi 2h la semaine dernière à tenter de comprendre pourquoi l'authentification NTLM ne fonctionnait plus sur une url mais bien sur une autre. L'ordre alphabétique des fichiers faisait que j'avais inversé le point 1 et 2. Par contre, pour l'url d'un site situé en 3, comme le module avait été chargé en phase 2, alors l'authentification était fonctionnelle pour ce site...

Mutualisation par inclusion de fichiers de configuration

Le module "core" d'apache fournit la directive Include très utile dans la cas où il faut reproduire une configuration identique pour plusieurs virtualhosts.

Prenons le cas de deux sites réalisés avec le même outil et accessibles sous deux urls différentes (www.monsite.fr et www.monsite.com par ex). Ces deux sites possèdent le même jeu de réécriture d'url (ie celles fournit par le produit).

Une première et mauvaise façon de faire serait de créer 2 fichiers de configuration contenant à chaque fois l'ensemble de la configuration. En cas de modification d'une règle, il vous faut faire la modification à deux endroits. C'est ce qui était fait jusqu'au week-end dernier pour Globe.

Cela vous donnerait un fichier du type /etc/httpd/conf.d/www.monsite.fr.conf :

<VirtualHost xxx.xxx.xxx.xxx>
    ServerName www.monsite.fr
    DocumentRoot /var/www/monsite

    <Directory /var/www/monsite/>
         ...
         Ensemble d'instructions
         ...
    </Directory>

    ...
    [Jeu d'instrusctions de réécriture]
    ...

    ErrorLog ...
    AccessLog ...
</VirtualHost>

Idem pour monsite.com (/etc/httpd/conf.d/www.monsite.com.conf)

La bonne façon de faire est la suivante :

/etc/httpd/conf.d/www.monsite.fr.conf :

<VirtualHost xxx.xxx.xxx.xxx>
    ServerName www.monsite.fr
    Include /etc/httpd/application/directory.txt
    Include /etc/httpd/application/rewrite_rule.txt

    ErrorLog ...
    AccessLog ...
</Virtualhost>

et /etc/httpd/conf.d/www.monsite.com.conf

<VirtualHost xxx.xxx.xxx.xxx>
    ServerName www.monsite.com
    Include /etc/httpd/application/directory.txt
    Include /etc/httpd/application/rewrite_rule.txt

    ErrorLog ...
    AccessLog ...
</Virtualhost>

Avec /etc/httpd/application/directory.txt :

DocumentRoot /var/www/monsite

<Directory /var/www/monsite/>
    ...
    Ensemble d'instructions
    ...
</Directory>

et /etc/httpd/application/rewrite_rule.txt :

[Jeu d'instrusctions de réécriture]

Ainsi, on peut mutualiser au maximum au niveau de la configuration d'apache, sans se priver de pouvoir rajouter des directives propres à un virtual host en incluant des fichiers supplémentaires.

Ex si on a une couche SSO pour un site et une version anonyme (toujours dans le cas de Globe) :

/etc/httpd/conf.d/intranet.monsite.fr.conf :

<VirtualHost xxx.xxx.xxx.xxx>
    ServerName intranet.monsite.fr
    Include /etc/httpd/application/directory.txt
    Include /etc/httpd/application/rewrite_rule.txt
    Include /etc/httpd/application/authentification_SSO.txt

    ErrorLog ...
    AccessLog ...
</Virtualhost>

et /etc/httpd/conf.d/intranet.monsite.com.conf :

<VirtualHost xxx.xxx.xxx.xxx>
    ServerName intranet.monsite.com
    Include /etc/httpd/application/directory.txt
    Include /etc/httpd/application/rewrite_rule.txt
    # Include /etc/httpd/application/authentification_SSO.txt

    ErrorLog ...
    AccessLog ...
</Virtualhost>

Bien sur, vous pouvez mettre vos fichiers ailleurs que dans /etc/httpd/application

Gestion de variables dynamiques

Dans ce coté générique, un besoin de jouer avec des variables peut apparaître, ces variables prenant des valeurs particulières selon les fichiers de configuration apache.

Plusieurs pistes :

  • La directive SetEnvIf utilisée pour Globe pour contourner l'authentification pour certaines ressources :
<Location />
    Order Deny,Allow
    Deny From All

    <IfModule mod_auth_ntlm_winbind.c>
         AuthName "NTLM Authentification"
         NTLMAuth on
         NTLMAuthHelper "/usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp"
         NTLMBasicAuthoritative on
         AuthType NTLM
    </IfModule>

    Require valid-user
    <fModule mod_setenvif.c>
        # Declaration des clients utilisant l'authentification intégrée
        SetEnvIf Remote_Addr "10\.(10|13|14|19|20|44|45|49)\.[0-9]{1,3}\.[0-9]{1,3}" pays # Pays 1
        SetEnvIf Remote_Addr "10\.(70|18|48)\[0-9]{1,3}\.[0-9]{1,3}" pays # Pays 2
        # Declaration de l'IP du robot indexant le site
        SetEnvIf Remote_Addr "10\.135\.255\.(1|44|35|244)" indexation

        # Declaration de la machine pour generation du cache statique
        SetEnvIf Remote_Addr "(127\.0\.0\.1|10\.135\.255\.45)" local

        # Sont autorises en anonyme "tout le monde" sauf les pays avec authentification intégrée.
        Allow from env=local env=indexation !env=pays
    </IfModule>
    Satisfy any
</Location>
  • Le module mod_include (non testé jusqu'à présent)
  • Au niveau de l'authentification par hôte, il y a la directive Require {env|ip|host|all} qui devrait permettre des choses intéressantes dans la prochaine version d'Apache.
View details »