Serveur web Nginx

WRInaute discret
Bonjour à tous,


Je suis en train de réflechir quant à la mise en place d'un reverse proxy pour l'un des sites dont je m'occupe.
L'idée est la suivante:

Faire tourner Apache2 avec Nginx en même temps.

Nginx s'occuperait de la gestion des fichiers statiques et Apache des fichiers dynamiques (voici un des liens que j'ai trouvé à ce sujet : http://www.papygeek.com/software/optimiser-son-serveur-web-avec-nginx/).

Tout cela est donc techniquement faisable et utilisé...

Ma problèmatique est la suivante.

J'ai plusieurs serveurs de fichiers que j'appelerais par exemple:
fichier1.siteweb.fr fichier2.siteweb.fr et fichier3.siteweb.fr

Les fichiers y sont stockés de façon aléatoire en fonction de la charge de chacun.

Je voudrais que lorsqu'un internaute demande l'url :
www.siteweb.fr/fichiers/monfichier.jpg

Une requete SQL soit lancée pour aller voir sur quel serveur le fichier monfichier.jpg est stocké pour aller ensuite l'afficher.

Ma question est donc comment faire pour qu'à chaque fois qu'un internaute demande un fichier je puisse lancer un script (avec l'url en parametre) qui ira vérifier sur quel serveur se trouve mon fichier.

Si vous avez d'autres solutions techniques n'hésitez pas!

Merci!
 
WRInaute passionné
Je rejoins l'avis de IllusionPerdu. Avoir tes fichiers partout te permettrait d'avoir du vrai load balancing.

Pour "copier" tes fichiers partout, je te conseille d'utiliser "incron" (incrontab) qui permet de lancer des crons en cas de modification de fichier.

Une requete SQL soit lancée pour aller voir sur quel serveur le fichier monfichier.jpg est stocké pour aller ensuite l'afficher.
Ca à mon avis, c'est un performance killer. Ca dépends un peu du type de requête, après bien sûr ça peut être caché.

Je voudrais que lorsqu'un internaute demande l'url :
www.siteweb.fr/fichiers/monfichier.jpg

J'utilise un peu ce principe là pour un site d'hébergement d'image.
-http://images.guiks.net/img/07-2010/242757705Capture.PNG
Si tu y vas sans referer, tu as des pubs (tu affiches en réalité le script img.php), si avec referer, le script img.php se charge uniquement d'afficher l'image à partir du bon serveur.

Moi c'est sous lighttpd, mais voici le rewrite que j'utilise (si ça peut t'aider dans ta réflexion):
Code:
        $HTTP["referer"] == "" {
                $HTTP["useragent"] =~ "(Android|iPhone|palm|BlackBerry)" {
                        url.rewrite-once = (
                                "^/img/(.*)$" => "/img.php?mob=yes&i=$1"
                        )
                }
                $HTTP["useragent"] !~ "(Android|iPhone|palm|BlackBerry)" {
                        url.rewrite-once = (
                                "^/img/(.*)$" => "/img.php?mob=no&i=$1"
                        )
                }
        }
Et comme tu vois, j'ai rajouté une gestion des pubs portables ;)
Voilà pour mon retour perso. Bon, après moi je suis un propagandiste de lighttpd, la conf (et surtout les rewrites) de nginx me font encore un peu peur. J'ai arrêté d'utiliser apache même pour le dynamique, d'après mes benchs, lighttpd reste toujours au minimum 20% plus performant.
 
WRInaute discret
En plus de cette manière c'est plus simple pour l'ajout ou la suppression d'un serveur.

* Pour la suppression : Effacer l'enregistrement du serveur DNS <= comme ça il n'y a plus que les autres serveurs d'actifs

* Pour l'ajout c'est un peu plus compliquer :
=> Copie des fichiers sur le nouveau serveur
=> Config du serveur web
=> Ajout de l'host dans le serveur dns
 
WRInaute discret
Merci à vous,

Le fonctionnement actuel des serveurs de fichiers est le suivant:

Des qu'un serveur est plein on en ajoute un nouveau. Et ce ainsi de suite...

Les serveurs de petite taille donc sont backupés plus régulièrement ce qui fait qu'en cas de crash les pertes sont minimes (certe en Raid, il n'y en aurait pas..). Ca je ne peux pas y toucher (indépendant de ma volonté!)

Je souhaite mettre en place cette solution de reverse proxy afin d'avoir un url propre (il n'y aura plus de sous domaine puisque pour acceder aux fichiers on fera siteweb.fr/fichiers/ par exemple (donc même domaine et meme sous domaine) et afin que les internautes ne tapent pas en direct dans les serveurs de stockage.
 
WRInaute passionné
Du Squid pourrait faire l'affaire je suis en train de penser (bon l'install est crade quand même).
Sinon, je t'ai filé un début de piste. Le SELECT SQL pourrait avoir lieux dans une redirection.
Sinon, tu pourrais réorganiser tes fichiers différements avec de :
a-c => server 1
d-g => server 2
Voilà pour des pistes en vrac.

Autre solution pour augmenter la vitesse, tu stocks en local les fichiers les plus demandés (si tu utilises ton système de requete SQL tu peux vite faire des stats).

Voilà pour mes retours en vracs :)
 
WRInaute discret
Organiser les serveurs en fonction du nom n'est pas une bonne idée car beaucoup de fichiers commencent par ex par une voyelle par rapport à un z.

Je vais utiliser un lodbalancer pour cela ce sera une repartition plus équitable.

Concernant le serveur pour finir, je vais m'orienter vers un reverse proxy sur Apache sans cache (seul le lien privé du fichier sera mis en cache) pour l'instant car cela risquerait de devenir très imposant d'ici quelques temps.

Je vous remercie donc de m'avoir aidé!
 
WRInaute passionné
Arf j'avais pas relu ce post avant de répondre à ton autre.
Pour ton :
Organiser les serveurs en fonction du nom n'est pas une bonne idée car beaucoup de fichiers commencent par ex par une voyelle par rapport à un z.
Bien entendu, mais après ça peut s'adapter, dans ton config.php, tu aurais simplement à stocker un array :
array (
'a' => 's1',
'b' => 's1',
etc...
Gros avantage, tu n'as aucune chose à mettre en place.
J'ignore où tu en es de ta réflexion mais tente de bien la choisir, j'avais déjà fait des mauvais choix, ça a été une merde pour mettre quelque chose de plus stable par la suite.
 
WRInaute discret
sauf que le jour ou tu veux rajouter des serveurs tu es bien embété. Tu va devoir déplacer des serveurs etc et donc les fichiers vont changer d'adresse, et donc très mauvais pour le référencement par exemple :/

Pour la suite de la reflexion, j'ai un autre post (reverse proxy) en cours ;)
 
Discussions similaires
Haut