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?
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$
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 remarqué à juste titre, il a juste suivi un autre location ~ ...
qui correspondait, de sorte que mon location ~ ...
n'avait aucune chance de courir.
Selon documentation nginx :
Les expressions régulières sont ensuite vérifiées, dans l'ordre de leur apparition dans le fichier de configuration. La recherche d'expressions régulières se termine à la première correspondance et la configuration correspondante est utilisée.
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 static :
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
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 dans statique / support ).
location ~ ^/(static|media)/ {
proxy_pass http://backend.example.com;
) <-----------
Devrait être...
location ~ ^/(static|media)/ {
proxy_pass http://backend.example.com;
} <-----------
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.