Lighttpd + Apache

48 réponses
AuteurMessage

abravanel666
Modérateur

 

Inscrit le : 19/07/2009

# Le 14/08/2009 à 09:48

Salut

De mon coté pour éviter d'avoir a chainer 2 serveur j'ai fait la manip suivante :
j'ai collé 2 adresse Ips à ma machine (la normale + la fail over chez ovh)
j'ai bindé apache uniquement sur la premiere et ngnix uniquement sur la seconde.
apres j'ai 2 domaines : le www. et le static. qui chacun renvoie sur la bonne ip.
En plus le jour ou tu veux éclater sur 2 serveurs c'est pas plus difficile.

derrière j'optimise chaque serveur : keepalive, cache, etc ... et les gains de perfs sont vraiment très interessants

http://www.magasins-usine.infoOuvrir dans une nouvelle fenetre http://www.shoppingactu.comOuvrir dans une nouvelle fenetre

MathieuC
Modérateur

Photo de MathieuC

Inscrit le : 15/07/2005

# Le 22/10/2009 à 14:33

Je remonte ce sujet car je suis en train d'experimenter avec NginX et j'ai un probleme que je n'arrive pas a resoudre.

Je cherche a mettre en place le "classique" NginX sur le port 80 et apache sur le 8080 qui ne recoit que les requete que NginX veut bien lui envoyer.
En résumé, NginX traite tous les fichiers statiques (jpg|jpeg|gif|css|png|js|ico|txt|srt|swf) et sert de proxy vers apache pour les autres types de fichiers.

Ca marche sans aucun probleme sauf pour un cas particulier, les "fausse" images qui sont en Url rewritting.

J'ai une image du type /img/tracking-d1SDFs0.gif qui est un pixel de tracking. Ce fichier n'existe evidement pas et pointe sur un fichier .php qui traite le tracking puis renvoie une image.

Malheureusement, NginX voit '.gif' et se dit qu'il doit traiter cette requete en direct, comme le fichier n'existe pas sur le disque, il renvoie une 404

Comment dire a NginX que si le fichier n'existe pas, il doit transferer la requete au apache ?

PS : Je n'ai pas le probleme avec les "vrai" 404, si je demande un fichier qui n'existe pas (mais pas avec une extension "statique"), NginX transfere la requete a apache qui me renvoie un 404 personnalisé.

PS2 : ma conf NginX en court : (source : http://www.papygeek.com/software/optimiser-son-ser...Ouvrir dans une nouvelle fenetre )


/etc/nginx/sites-available/default

server {
listen 80;
server_name www.domaine.com;

# Les requêtes sont transmises au processus Apache écoutant en local sur le port 8080
location / {
proxy_pass http://127.0.0.1:8080/;Ouvrir dans une nouvelle fenetre
include /etc/nginx/proxy.conf;
}

# On distribue les fichiers statiques directement
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|txt|srt|swf)$ {
root /var/www/domaine.com/;
expires 30d;
}
}



/etc/nginx/proxy.conf

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

ultrajoe
Membre

Photo de ultrajoe

Inscrit le : 16/07/2008

# Le 22/10/2009 à 15:13

Je n'ai pas la solution exacte à ton problème vu que je n'utilise pas Nginx, mais surement une piste.
Je ne vois pas de "rewrite" dans la conf de Nginx pour lui expliquer ton url rewriting donc forcément pour lui c'est une image statique.

Pour résumer, il faut que tu fasses le rewriting au niveau d'Nginx et non de Apache.

(Message édité le 22-10-2009 à 15h20 par ultrajoe)

MathieuC
Modérateur

Photo de MathieuC

Inscrit le : 15/07/2005

# Le 22/10/2009 à 15:23

Justement, je ne veux pas expliquer a NginX mon url rewriting, je veux qu'il se rende compte tout seul que si le fichier n'existe pas, il transfere la requete a apache.

D'une part ca resout le probleme, et d'autre part ca permet d'avoir des 404 "consistants", et non une partie des 404 renvoies par apache et une autre par NginX. (si on a personnalise le 404 par htaccess, ce serait la merde).

L'architecture ne doit pas etre une contrainte pour le dev, je ne veux pas avoir a faire des confs d'url rewriting specifiques a NginX qui seront obsoletes si l'architecture est amenee a evoluer.

bhamp0
Membre

Photo de bhamp0

Inscrit le : 09/05/2005

# Le 22/10/2009 à 15:39

Un truc du genre :


if (!-f $request_filename) {
proxy_pass http://127.0.0.1:8080/;Ouvrir dans une nouvelle fenetre
break;
}

Quand on voit c'qu'on voit, et qu'on entend c'qu'on entend, on a raison d'penser c'qu'on pense !

Julgates
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 22/10/2009 à 15:49

Et si tu raisonnes inversement ? En ne mettant pas gif dans ta règle mais une nouveles règles avec le ou les répertoires d'images statiques sur la directive location ?

Beyoung InteractiveOuvrir dans une nouvelle fenetre - Consultant web

MathieuC
Modérateur

Photo de MathieuC

Inscrit le : 15/07/2005

# Le 22/10/2009 à 15:52

bhamp0> j'avais vu cette option, mais j'ai pas reussi a en tirer quelchose de fonctionnel, soit il me dit que j'ai pas le droit de mettre de directive proxy_pass dans le if, soit il l'ignore

julgates> ca demanderait de lister tous les reps, ca ajouterais une contrainte selon laquelle les fichiers statiques hors de ces repertoires seront servis par apache et ca empecherait de mettre les "faux" fichiers gif dans /img/ pour brouiller les pistes, ca fait bcp de contraintes

Je vais chercher encore la solution ideale qui n'impose aucune contrainte au dev, si je la trouve je vous tiens au courant

bhamp0
Membre

Photo de bhamp0

Inscrit le : 09/05/2005

# Le 22/10/2009 à 17:47


# On distribue les fichiers statiques directement
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|txt|srt|swf)$ {
root /var/www/domaine.com/;
expires 30d;
error_page 404 = @erreur404;
}

location @erreur404{
proxy_pass http://127.0.0.1:8080/;Ouvrir dans une nouvelle fenetre
include /etc/nginx/proxy.conf;
}

Quand on voit c'qu'on voit, et qu'on entend c'qu'on entend, on a raison d'penser c'qu'on pense !

Bool
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 24/10/2009 à 10:10

Tu as la directive try_filesOuvrir dans une nouvelle fenetre qui sert justement à ça (version 0.7.27 minimum).

Google is watching you.

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.