Billets avec l'étiquette ‘Linux’

Reverse proxy avec Apache et mod_proxy sur Ubuntu

09-07-2012 par Horacio Gonzalez
LiB Ubuntu

Au boulot je travaille sur des distributions serveur Scientific Linux, basé sur RedHat. Je suis donc habitué à l’installation et configuration d’Apache sur RedHat, même si mes machines personnelles sont toujours basés sur Ubuntu ou Debian.

Il y a une quinzaine de jours, pour préparer le Bootcamp Android du FinistGDG, j’ai eu besoin d’un reverse proxy sur ma Dedibox. Et vu que j’ai dû batailler un peu pour que cela marche, je préfère consigner la manip ici, afin de me souvenir pour a prochaine fois (et accessoirement de dépatouiller quelqu’un qui aurait le même besoin et qui tomberait sur cette page 😉 ).

Je suis parti d’une Ubuntu avec Apache2 installé et configuré avec plusieurs virtual hosts. L’objectif était d’ajouter un virtual host qui faisait du frontal reverse proxy pour un tomcat installé sur la machine.

D’abord j’ai installé mod_proxy sur l’Apache2

$ sudo apt-get install libapache2-mod-proxy-html

Ensuite il faut activer le mod_proxy pour les protocoles qu’on souhaite, et c’est là où j’ai pris un peu de temps pour comprendre mon soucis. J’ai commencé pour activer mod_proxy :

$ sudo a2enmod proxy

Sauf que, bien entendu, cela ne marchait pas. J’obtenais une erreur pas trop parlant à première abord :

proxy: No protocol handler was valid for the URL

Pourquoi ? J’avais du mal à comprendre ce qui manquait, jusqu’à que j’ai saisi le problème, Apache ne savait pas comment gérer mes appels, car il ne savait pas comment faire proxy HTTP. C’était logique, car j’avais activé mod_proxy mais pas tous ces composants, et surtout pas celui qui me fallait, le proxy HTTP. Je voulais que mon proxy soit un reverse proxy HTTP. Il fallait donc activer ce mode :

$ sudo a2enmod proxy proxy_http

Une fois cela compris, la conf habituelle de mon virtual host a marché sans soucis :

<VirtualHost *:80>
    ServerName lostinbrittany.org
    ServerAlias www.lostinbrittany.org

    [...]

    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>    
    ProxyPass /java/ http://127.0.0.1:8080/
    ProxyPassReverse /java/ http://127.0.0.1:8080/
</VirtualHost>

L’objectif était donc de rediriger en interne (reverse proxy) toutes les appels vers https://lostinbrittany.org/java/ vers un tomcat installé sur la même machine et écoutant sur le port 8080.

Plus je bosse avec RedHat, plus je préfère Ubuntu/Debian…

15-12-2009 par Horacio Gonzalez
LiB et Ubuntu

Étant un fervant utilisateur d’Ubuntu depuis des années, je me sens beaucoup plus à l’aise sur des distributions de type Debian que sur celles basées sur RedHat. Cependant il m’arrive relativement souvent (surtout ces derniers temps) de devoir m’occuper de serveurs RedHat-like, et à chaque fois je constate encore une fois que je préfère la façon Debian d’administrer le système.

A titre d’exemple, voyons le dernier problème auquel je me suis confronté ce matin. L’opération était de la pure routine, je voulais installer un nouveau paquet sur un serveur. Mais lorsque je lance mon yum install, je me suis heurté à un beau message d’erreur pas explicite de tout :

Loaded plugins: kernel-module
error: no dbpath has been set
error: cannot open Packages database in /%{_dbpath}
Traceback (most recent call last):
File "/usr/bin/yum", line 29, in ?
yummain.user_main(sys.argv[1:], exit_code=True)
File "/usr/share/yum-cli/yummain.py", line 229, in user_main
errcode = main(args)
File "/usr/share/yum-cli/yummain.py", line 84, in main
base.getOptionsConfig(args)
File "/usr/share/yum-cli/cli.py", line 184, in getOptionsConfig
enabled_plugins=self.optparser._splitArg(opts.enableplugins))
File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 191, in _getConfig
self._conf = config.readMainConfig(startupconf)
File "/usr/lib/python2.4/site-packages/yum/config.py", line 754, in readMainConfig
yumvars['releasever'] = _getsysver(startupconf.installroot, startupconf.distroverpkg)
File "/usr/lib/python2.4/site-packages/yum/config.py", line 824, in _getsysver
idx = ts.dbMatch('provides', distroverpkg)
TypeError: rpmdb open failed

J’ai essayé d’abord la solution classique aux problèmes yum, un bon vieux yum clean all, mais cela n’a rien fait. Les premières recherches sur le net suggéraient que le problème venait de ma base de données des RPM en local, qui serait corrompue, mais la solution proposée ne marchait pas :

rm -rf /var/lib/rpm/__db.00*
rpm --rebuilddb
yum clean all
yum update

Après quelques recherches de plus, j’ai fini par trouver une solution qui marche :

rm /dev/urandom
mknod -m 644 /dev/urandom c 1 9

Et oui, ça marche… mais je ne sais pas pourquoi. Ce qui m’ennuie est donc le côté “magique” de la solution, je n’ai trouvé aucune explication du pourquoi du comment. Ca marche, mais personne ne semble savoir pourquoi, ni d’où vient l’erreur. Et j’ai du mal à comprendre qu’est-ce que /dev/urandom, un pseudo-fichier pour génération de nombres aléatoires, a à voir avec des problèmes de yum.

Définitivement, je préfère mon Ubuntu…