1 votes

nginx - la demande est traitée par plusieurs blocs d'emplacement

Je teste une configuration dans laquelle j'aimerais que nginx serve les médias statiques et transmette toutes les autres requêtes à un autre backend. Ma configuration ressemble à ceci :

location /media    {alias /var/httpd/media;}
location /         {proxy_pass http://127.0.0.1:8080;}

Toutefois, si une demande est faite pour une ressource média inexistante, par ex. /media/foo.js , nginx essaie de chercher /var/httpd/media/foo.js et si elle n'est pas trouvée, elle essaie également d'acheminer la demande par proxy vers 127.0.0.1:8080 . Voici les journaux d'erreurs de nginx :

2012/05/18 17:09:21 [error] 10073#0: *1 open() "/var/httpd/media/foo.js" failed (2: No such file or directory), client: 127.0.0.1, server: www.example.com, request: "GET /media/foo.js HTTP/1.1", host: "www.example.com"
2012/05/18 17:09:21 [error] 10073#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: www.example.com, request: "GET /media/foo.js HTTP/1.1", upstream: "http://127.0.0.1:8080/media/foo.js", host: "www.example.com"

De plus, je remarque que si /var/httpd/media/foo.js fait existe mais n'est pas lisible par le processus exécutant nginx, alors nginx ne tente pas d'établir un proxy vers http://127.0.0.1:8080 et renvoie un 403 Forbidden . Journal des erreurs :

2012/05/18 17:09:33 [error] 10073#0: *1 open() "/var/httpd/media/foo.js" failed (13: Permission denied), client: 127.0.0.1, server: www.example.com, request: "GET /media/foo.js HTTP/1.1", host: "www.example.com"

Pourquoi le premier scénario entraîne-t-il le traitement des deux blocs d'emplacement et le second le traitement du seul bloc d'emplacement du média ? Comment puis-je faire en sorte que le premier scénario ne traite que le bloc de localisation du média et ne tente pas d'établir un proxy avec le backend ?

Note : J'ai également essayé d'ajouter un ^~ préfixe au bloc d'emplacement du média :

location ^~ /media    {alias /var/httpd/media;}

...mais cela n'a pas changé le comportement de nginx, qui a continué à descendre dans la zone d'ombre de l'ordinateur. / après avoir échoué dans le /media bloc.

1voto

DukeLion Points 3209

Je suppose que vous avez mis error_page 404 quelque part dans le deuxième emplacement.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X