J'ai deux emplacements dans la configuration nginx qui fonctionnent:
location ^~ /media/ {
proxy_pass http://backend.example.com;
}
location ^~ /static/ {
proxy_pass http://backend.example.com;
}
Comment puis-je combiner ces deux en un seul endroit?
Ce que j'ai déjà fait:
J'ai essayé cette suggestion
location ~ ^/(static|media)/ {
proxy_pass http://backend.example.com;
}
mais ça ne marche pas pour moi.
De plus, lorsque je n'utilise pas de backends, la configuration suivante fonctionne correctement:
location ~ ^/(static|media)/ {
root /home/project_root;
}
mise à jour (quelques chaînes du journal)
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /content/11160/ HTTP/1.1" 200 5310 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 OPR/18.0.1284.68"
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/font-awesome/css/font-awesome.min.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/css/custom.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/53$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/colorbox/colorbox.css HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Sa$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/colorbox/jquery.colorbox-min.js HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.$
xx.xx.xx.xx - - [31/Dec/2013:13:48:18 +0000] "GET /static/js/scripts.js HTTP/1.1" 404 200 "http://www.example.com/content/11160/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537$
SOLUTION
En fait, ma solution fonctionne bien:
location ~ ^/(static|media)/ {
root /home/project_root;
}
et la question n'a rien à voir avec les backends. Comme Guido Vaccarella l'a correctement remarqué, il s'en est suivi un autre location ~ ...
qui correspondait, de sorte que je location ~ ...
n'avais aucune chance de courir.
Réponses:
Selon la documentation de nginx :
Dans votre configuration, l'emplacement suivant est défini avant celui avec le proxy_pass et il correspond à la demande des fichiers js et css sous statique :
Malheureusement, la clause "log_not_found off" désactive la journalisation pour toute erreur de fichier introuvable concernant cet emplacement, c'est pourquoi votre error_log est vide!
Vous pouvez essayer de commenter cet emplacement ou le déplacer après l'emplacement avec le proxy_pass (si vous en avez besoin pour d'autres fichiers qui ne sont pas statiques / multimédias ).
la source
Devrait être...
La fermeture doit être une accolade {}, pas une parenthèse parenthèse ().
Je ne peux pas croire combien de temps il a fallu pour voir ça. Guido avait raison des commentaires.
la source
|media)
dans la chaîne a commencé par "location". Mais une mauvaise accolade ici n'est qu'une faute de frappe (corrigée en question). Sinon, cette configuration nginx ne serait pas chargée et lancerait à nouveau une erreur commeunexpected ")"...
Désolé.