2014-10-07 10 views
15

Jestem teraz wdrażania aplikacji Django z nginx i gunicorn na ubuntu 12.pobierania plików statycznych nie powiodło się z 404 w nginx

I skonfigurować plik hosta wirtualnego nginx jak poniżej:

server { 
    listen 80; 
    server_name mydomain.com; 
    access_log /var/log/nginx/gunicorn.log; 

    location/{ 
     proxy_pass http://127.0.0.1:8000; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 

    location /static/ { 
     root /var/www/django/ecerp/erp/static/; 
    } 

} 

I może zażądać dobrze django, ale gdy zażąda pliku statycznego, odpowiada on statusem 404.

Jestem pewna, że ​​ścieżka do pliku statycznego jest prawidłowa.

Czy ktoś może pomóc?

+1

http://wiki.nginx.org/Pitfalls#Root_inside_Location_Block. http://nginx.org/r/root –

+0

Chciałbym również upewnić się, że twój użytkownik nginx ma uprawnienia dostępu do katalogu. Powodzenia – pztrick

+0

@pztrick problem z pozwoleniem. Zmieniłem go na 777. A teraz zwracam 404, ale nie 403. –

Odpowiedz

25

Powinieneś użyć alias zamiast root. root dołącza końcowe części adresów URL do lokalnej ścieżki (np. http://test.ndd/trailing/part, spowoduje dodanie/zwrócenie/części do lokalnej ścieżki). Zamiast tego, alias robi dokładnie to, czego potrzebujesz: gdy żądane jest http://test.ndd/static/,/statyczny jest dokładnie odwzorowany na twój alias, bez ponownego dołączania statycznego.

+3

Spędziłem około 3 godzin próbując to zrozumieć, dzięki! – noahandthewhale

3

TL; DR - należy sprawdzić uprawnienia plików

Natknęliśmy się na to pytanie, a ja już korzysta alias zamiast root, więc gdy istniejąca odpowiedź była aż do punktu, następujące mogą być użyteczne do innych.

W moim przypadku rozwiązaniem tych samych symptomów okazały się pliki o static/ mające właściciela root.

Prosty chown www-data:www-data . rozwiązał problem i nie więcej niż 404.

+0

Próbowałem również tego z chmod. Jakie pozwolenie rzeczywiście potrzebuje nginx w pliku? Tylko do odczytu wydaje się niewystarczający. Pełny dostęp wydaje się przesadny. –

+0

@ ST-DDT to nie jest dobry pomysł, aby uzyskać dostęp do plików "root" z Nginx, niezależnie od tego, jakie uprawnienia mogą mieć. Używanie 'chown' jest tutaj znacznie lepszym wyborem. – Jivan