Disons que vous avez installé :

  • SVN couplé à Apache2 sur le port 80
  • Hudson sur le port 8081
  • Trac sur le port 8082

Vous souhaitez créer les URL publics suivantes sans avoir besoin de préciser le numéro du port :

  • http://svn.corporate.com/
  • http://hudson.corporate.com/
  • http://trac.corporate.com/

Pour se faire il vous suffit d'utiliser la réécriture d'URL de Apache2 qui est installé sur le port 80.

Mémo technique d'installation de la réécriture d'URL sur Apache2

Pour rendre plus générique ce petit mémo :

  • Les fichiers sources de Apache2 se trouvent dans le répertoire /PATH_DES_SOURCES/
  • Les binaires et la conf de Apache2 se trouvent dans /PATH_DES_BIN/
  • La version de Apache2 utilisé ici est la 2.2.11

Placez-vous dans le répertoire où se trouve le fichier mod_proxy.c (/PATH_DES_SOURCES/httpd-2.2.11/modules/proxy) et recompilez les modules utiles pour le proxy pass reverse avec les deux commandes suivantes.

/PATH_DES_BIN/httpd-2.2.11/bin/apxs -a -i -c mod_proxy.c proxy_util.c
/PATH_DES_BIN/httpd-2.2.11/bin/apxs -a -i -c mod_proxy_http.c mod_proxy_connect.c

Les modules mod_proxy mod_proxy_http et mod_proxy_connect ont dû être installés dans le répertoire /PATH_DES_BIN/httpd-2.2.11/modules/, les fichiers en .so

Ensuite il faut activer la réécriture d'URl en créant un virtual-host de la manière suivante.

Dé-commenter la ligne "Include conf/extra/httpd-vhosts.conf" dans le fichier /PATH_DES_BIN/httpd-2.2.11/conf/httpd.conf

Ajouter les virtual hosts dans le fichier /PATH_DES_BIN/httpd-2.2.11/conf/extra/httpd-vhosts.conf comme l'exemple ci-après qui correspond au contexte décrit plus haut dans ce billet :

<VirtualHost *:80>
    ServerName svn.corporate.com
    ServerAlias www.svn.corporate.com
    ProxyPreserveHost On
    ProxyPass / http://localhost:80/svn/
    ProxyPassReverse / http://localhost:80/svn/
    ErrorLog "logs/svn.corporate.com-error_log"
    CustomLog "logs/svn.corporate.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerName hudson.corporate.com
    ServerAlias www.hudson.corporate.com
    ProxyPreserveHost On
    ProxyPass / http://localhost:8081/hudson/
    ProxyPassReverse / http://localhost:8081/hudson/
    ErrorLog "logs/hudson.corporate.com-error_log"
    CustomLog "logs/hudson.corporate.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerName trac.corporate.com
    ServerAlias www.trac.corporate.com
    ProxyPreserveHost On
    ProxyPass / http://localhost:8082/trac/
    ProxyPassReverse / http://localhost:8082/trac/
    ErrorLog "logs/trac.corporate.com-error_log"
    CustomLog "logs/trac.corporate.com-access_log" common
</VirtualHost>

Relancer Apache2 :

/PATh_DES_BIN/httpd-2.2.11/bin/apachctl -k restart

Ca devrait marcher :)