Mam dwie lokalizacje w konfiguracji nginx, które działają:
location ^~ /media/ {
proxy_pass http://backend.example.com;
}
location ^~ /static/ {
proxy_pass http://backend.example.com;
}
Jak połączyć te dwa w jedną lokalizację?
Co już zrobiłem:
Wypróbowałem tę sugestię
location ~ ^/(static|media)/ {
proxy_pass http://backend.example.com;
}
ale to nie działa dla mnie.
Ponadto, gdy nie używam backendów, następująca konfiguracja działa poprawnie:
location ~ ^/(static|media)/ {
root /home/project_root;
}
aktualizacja (niektóre ciągi z dziennika)
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$
ROZWIĄZANIE
Właściwie moje rozwiązanie działa dobrze:
location ~ ^/(static|media)/ {
root /home/project_root;
}
i problem nie ma nic wspólnego z backendami. Jak Guido Vaccarella poprawnie zauważył, po prostu następowało kolejne location ~ ...
, pasujące, więc location ~ ...
nie miałem szans na bieganie.
Odpowiedzi:
Zgodnie z dokumentacją nginx :
W twojej konfiguracji następująca lokalizacja jest zdefiniowana przed tą z proxy_pass i odpowiada żądaniu plików js i css pod statycznym :
Niestety klauzula „log_not_found off” wyłącza rejestrowanie błędów związanych z brakiem znalezienia pliku związanych z tą lokalizacją, dlatego Twój dziennik błędów jest pusty!
Możesz spróbować skomentować tę lokalizację lub przenieść ją za lokalizacją za pomocą proxy_pass (jeśli potrzebujesz go dla innych plików, które nie są w statycznym / medialnym ).
źródło
Powinno być...
Zamknięciem musi być nawias klamrowy {}, a nie nawias klamrowy ().
Nie mogę uwierzyć, ile czasu to zajęło. Guido miał rację z komentarzy.
źródło
|media)
w łańcuchu zaczynało się od „lokalizacji”. Ale zły nawias klamrowy to tylko literówka (poprawiona w pytaniu). W przeciwnym razie ta konfiguracja nginx nie zostałaby załadowana i ponownie wygenerowałaby błąd podobny do:unexpected ")"...
Przepraszamy.