jl83 Posté 27 Janvier 2010 Posté 27 Janvier 2010 Bonjour à tous, Je suis confronté au problème suivant (je précise que je suis sur un serveur dédié qui héberge de nombreux sites) : Sur un site, j'ai besoin d'afficher des images qui se trouvent dans un répertoire correspondant à un autre site (donc au-dessus de la racine du site). En clair, mon image se trouve dans le répertoire /home/SITE1/domains/site1.com/public_html/images/image.png et je dois afficher cette image sur une page qui se trouve dans le répertoire /home/SITE2/domains/site2.com/public_html/index.php Pour exécuter des fonctions PHP sur le fichier image (comme getimagesize), ça ne pose pas de problème d'utiliser le chemin absolu (/home/...) Par contre, pour afficher l'image avec <img src="/home/SITE1/domains/site1.com/public_html/images/image.png"> ça ne marche pas ! Je sais que je pourrais utiliser le chemin HTTP en faisant <img src="http://www.site1.com/images/image.png"> mais l'objectif est précisément de ne pas surcharger Apache, car ce type d'opération est effectué des milliers de fois sur un grand nombre de sites, et du coup mon serveur rame complètement. Je souhaiterais donc pouvoir faire un accès direct au fichier, sans passer par HTTP. J'ai tourné le problème dans tous les sens, ça refuse de fonctionner ! Merci d'avance de vos pistes ! Jean-Luc
Jeanluc Posté 27 Janvier 2010 Posté 27 Janvier 2010 Bonjour, Par contre, pour afficher l'image avec <img src="/home/SITE1/domains/site1.com/public_html/images/image.png"> ça ne marche pas ! Je sais que je pourrais utiliser le chemin HTTP en faisant <img src="http://www.site1.com/images/image.png"> mais l'objectif est précisément de ne pas surcharger Apache, car ce type d'opération est effectué des milliers de fois sur un grand nombre de sites, et du coup mon serveur rame complètement. Je souhaiterais donc pouvoir faire un accès direct au fichier, sans passer par HTTP. Il n'y a aucune différence de charge serveur entre les deux types d'affichage. La conversion de /images/image.png en http://www.ton_site.com/images/image.png est faite par le navigateur et non par le serveur. Jean-Luc
captain_torche Posté 27 Janvier 2010 Posté 27 Janvier 2010 De plus, un navigateur ne pourra jamais afficher un chemin serveur qui lui est caché : tes réglages serveur vont faire que ton domaine pointera sur "/home/SITE1/domains/site1.com/", et nulle part ailleurs.
jl83 Posté 27 Janvier 2010 Auteur Posté 27 Janvier 2010 Merci pour vos réponses ! Il va donc falloir que je trouve autre chose pour réduire la charge...
captain_torche Posté 27 Janvier 2010 Posté 27 Janvier 2010 Qu'est-ce que tu fais précisément de ces images avant de les afficher ? Si tu fais des traitements GD, tu pourrais envisager une solution de cache, non ?
jl83 Posté 27 Janvier 2010 Auteur Posté 27 Janvier 2010 En fait, je n'en fais pas grand chose si ce n'est les afficher, et éventuellement en déterminer la taille. Par contre, une même photo est affichée sur de nombreux sites distincts, alors qu'elle est stockée dans un seul répertoire. J'imagine donc qu'il doit y avoir des solutions pour réduire la charge de mon serveur ?
captain_torche Posté 27 Janvier 2010 Posté 27 Janvier 2010 A moins de mettre en cache les photos sur les sites distants, tu n'en as pas, non. Tu as combien d'appels/jour sur ces images ?
jl83 Posté 27 Janvier 2010 Auteur Posté 27 Janvier 2010 Pas évident de le savoir précisément, mais plusieurs dizaines voire plusieurs centaines.
captain_torche Posté 27 Janvier 2010 Posté 27 Janvier 2010 Sur chaque image, ou toutes images confondues ?
jl83 Posté 27 Janvier 2010 Auteur Posté 27 Janvier 2010 Non non, c'est pour chaque image. Toutes images confondues ça doit faire plusieurs dizaines de milliers par jour.
captain_torche Posté 27 Janvier 2010 Posté 27 Janvier 2010 Après, ça dépend de comment est dimensionné ton serveur. C'est du dédié ou du mutualisé ?
jl83 Posté 27 Janvier 2010 Auteur Posté 27 Janvier 2010 C'est un dédié 4 coeurs et 8 Go de RAM. Mais c'est vrai qu'il y a beaucoup de sites dessus (plus de 1000). Et vu que le contenu de la plupart des sites utilise une base de données partagées, ainsi que des images partagées, je me dis qu'il y a quelque chose à faire pour réduire la charge, qui devient critique depuis quelques semaines.
captain_torche Posté 27 Janvier 2010 Posté 27 Janvier 2010 Tu es certain que ce sont les appels images qui sont responsables de ta charge serveur ? Parce qu'à priori ça ne devrait impacter que la bande passante. Tu peux me donner plus de précisions sur les traitements que tu fais pour déterminer leurs tailles ?
jl83 Posté 27 Janvier 2010 Auteur Posté 27 Janvier 2010 A vrai dire, je ne suis certain de rien... Pour la taille, j'utilise un filesize. Par contre il y a aussi une fonction de création d'un filigrane (donc des getimagesize, imagecreatefromjpeg, imagettftext et imagejpeg). Maintenant je ne certifie pas que les images soient la cause principale de la charge, par contre c'est vrai qu'il y a énormément d'images qui s'affichent en permanence.
captain_torche Posté 27 Janvier 2010 Posté 27 Janvier 2010 Ha, le filigrane peut être à l'origine de tout ça, si tu le fais à la volée ! Il ne te reste plus qu'à mettre les images générées par GD en cache, tu allègeras déjà pas mal ton serveur.
jl83 Posté 27 Janvier 2010 Auteur Posté 27 Janvier 2010 Oui, il est effectivement fait à la volée Pour la mise en cache, ça se fait via un module Apache spécifique ?
Jeanluc Posté 27 Janvier 2010 Posté 27 Janvier 2010 A vrai dire, je ne suis certain de rien...Utiliser des fonctions qui traitent des images est beaucoup plus lourd pour le serveur que le simple affichage de ces images. Pour le reste, si tu veux optimiser les choses, il faut commencer par comprendre. Sans cela, ce n'est pas de l'optimisation, mais un jeu de hasard. Jean-Luc
captain_torche Posté 27 Janvier 2010 Posté 27 Janvier 2010 Pour la mise en cache, ça se fait via un module Apache spécifique ? Pas nécessairement, mais faudra mettre un peu les mains dans le cambouis. Personnellement, si tes images sont toutes dans le même répertoire, je ferais une règle de redirection qui les renverrait toutes vers un fichier unique. Ce fichier vérifierait l'existence d'une image retravaillée dans son répertoire de cache. Si elle n'est pas présente, il la crée avec le filigrane et m'enregistre. Ensuite, il affiche le contenu de l'image du cache. A part la règle de réécriture, qui dépendra vraiment de l'organisation de tes répertoires, ça n'a rien de sorcier.
jl83 Posté 27 Janvier 2010 Auteur Posté 27 Janvier 2010 Je suis d'accord avec toi, mais même si on sait que telle ou telle fonction utilise davantage de ressources, il n'est pas évident de déterminer, à partir d'une charge serveur donnée, quelle est l'origine exacte d'une surcharge, d'autant que les paramètres sont nombreux et évolutifs... Et tant que tout va bien, on se pose moins de questions... notamment dans l'utilisation des fonctions dont on a besoin.
jl83 Posté 27 Janvier 2010 Auteur Posté 27 Janvier 2010 Pas de problème pour le cambouis... Je vais étudier cela, sachant que les images ne sont pas toutes dans un même répertoire, loin de là même ! C'est du genre clients/1234/annonce/123456/... donc en gros des milliers de répertoires. Le plus simple serait donc peut-être de créer l'image "filigranée" en même temps que l'upload de l'image... et ce serait uniquement cette image qui serait utilisée ?
Dan Posté 27 Janvier 2010 Posté 27 Janvier 2010 Salut Jean-Luc, Tu ne m'avais nullement cité le fait que tu créais un filigrane à la volée Ne cherche pas plus loin... ton problème vient de là !
jl83 Posté 27 Janvier 2010 Auteur Posté 27 Janvier 2010 En effet, j'avais complètement oublié... et en effet, la mise en place correspond à peu près à l'augmentation plus régulière de la charge ! Je suis en train de faire une modif, afin que le filigrane ne soit créé qu'une seule fois, lors du premier affichage de chaque photo. La contrepartie, c'est que ça va augmenter sensiblement l'espace disque, car j'enregistre les photos filigranées... et j'ai un filigrane pour chaque langue, donc en tout 7 photos à la place d'une seule ! Mais bon, j'ai de la marge donc ça va.
captain_torche Posté 28 Janvier 2010 Posté 28 Janvier 2010 Les sites qui affichent les images sont tous les tiens ? Parce que malgré tout, ça va impliquer pas mal de changements de leur côté aussi, non ?
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant