Reverse proxy avec Apache

WRInaute discret
Bonjour à tous,

Je souhaite mettre en place un système de reverse proxy (jusque là tout va bien) dans le but tout naturellement de n'avoir qu'une seule adresse publique et surtout qu'on ne puisse pas accèder en direct à mes serveurs de stockage.

Le petit soucis que je rencontre est que lorsqu'un internaute demande un fichier qui se trouve sur 1 des serveurs de stockage (aucune duplication de fichiers sur les serveurs).

Le soucis est qu'avec ce systeme de reverse proxy je ne connais pas à l'avance sur quel serveur il va me falloir aller piocher, je souhaiterais donc lorsque l'url demandée est du type */fichiers/lancer un script plutot que de rediriger la requete vers un serveur (car à ce moment la on est incapable de savoir sur quel serveur se trouve le fichier.)

Il me semble qu'avec la directive RewriteMap (doc: http://www.helicontech.com/isapi_rewrite/doc/RewriteMap.htm) il y a moyen d'apeller un script php/perl


Merci de m'éclairer!
 
WRInaute passionné
Je ne suis pas sûr d'avoir bien compris le problème. Toujours est-il j'utilise ce système pour un site d'image (bon là je n'ai plus besoin de plusieurs serveurs donc il n'y a plus de "où c'est stocké").
Si tu peux donner 2/3 exemples d'URL pour que j'affine, mais si c'est comme je pense, voilà ce que je ferais:
actuellement : site/fichier/image.png
on cherche sur quel serveur est image.png
je ferais un rewrite de /fichier/ vers un /fichier.php?fichier=image.png

Après je ne suis pas du tout sûr que tu souhaites faire cela.

Je parle très souvent de lighttpd, tu as une option très intéressante pour ça en fonction du type de fichier / dossier :
Code:
      $HTTP["url"] =~ "^/blog" {
        proxy-co...
        proxy-core.rewrite-request = (
          "_uri" => ( "^/blog/?(.*)" => "/$1" ),
          "Host" => ( ".*" => "blog.example.org" ),
        )
      }
Dans ce cas ça permet qu'un sous domaine "blog.domaine.org" aparaisse en site.org/blog/
tu peux remplacer le $HTTP["url"] =~ "^/blog" { par un :
Code:
$HTTP["url"] =~"^/(.*).(jpg|jpeg|gif|ico|png)" {
=> serveur 1
$HTTP["url"] =~ "^/(.*).(css|js)" {
=> serveur 2

tu peux bien sûr "sous sélectionner le dossier /fichier/

Sans trop d'exemple je ne pourrais pas trop te dire mieux. Le problème du rewrite est que tu as au "pire" (si tout est en cache) des accès disques/au cache, la méthode lighttpd te permet de faire des trucs bien plus sympa (d'après moi bien sûr).
 
WRInaute passionné
Dans ce cas là la technique si dessous peut marcher. Sur ton autre post (on a qu'à continuer aussi) tu dis que ça ne te plait pas de dire :
a => serveur 1
b => serveur 1
c => serveur 2
car le jour où tu rajoutes des serveurs/en enlève c'est mauvais pour ton référencement.
Ce n'est pas le cas, car justement tu conserves l'architecture : /fichiers/
Mon exemple avec lighttpd se base sur l'extension du fichier mais pourrait se baser sur la première lettre.

Sinon, l'histoire du script php fichiers.php?file=plop.jpg peut aussi très bien marcher avec un tout petit rewrite.
Mais je pense que c'est un performance killer.
 
Discussions similaires
Haut