2014-10-07 16 views
15

Ora sto distribuzione di un app Django con nginx e gunicorn su ubuntu 12.file statici Recuperare fallito con 404 in nginx

E io configurare il file host nginx virtuale come di seguito:

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 può richiedere bene il django, ma quando richiede un file statico, risponde con lo stato 404.

Sono sicuro che il percorso root del file statico sia corretto.

Qualcuno può aiutare?

+1

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

+0

Mi piacerebbe anche assicurarmi che il tuo utente nginx abbia le autorizzazioni per accedere alla directory. Buona fortuna – pztrick

+0

@pztrick non problema di autorizzazione. L'ho modificato per essere 777. E ora restituisco 404 ma non 403. –

risposta

25

È necessario utilizzare alias anziché root. root aggiunge le parti URL finali al percorso locale (ad esempio http://test.ndd/trailing/part, aggiungerà/coda/parte al percorso locale). Invece di quello, alias fa esattamente quello che vuoi: quando è richiesto http://test.ndd/static/,/static viene mappato esattamente al tuo alias, senza appendere nuovamente statico.

+3

Ho trascorso circa 3 ore cercando di capirlo, grazie! – noahandthewhale

3

TL; DR - si dovrebbe controllare i file permessi

imbattuto su questa domanda e mi è stato già utilizzando alias invece di radice, così mentre la risposta esistente era fino al punto, il seguente potrebbe essere utile per gli altri.

Nel mio caso, la soluzione agli stessi sintomi si è rivelata essere i file in static/ con root come proprietario.

Un semplice chown www-data:www-data . ha risolto il problema e non più 404.

+0

Ho anche provato questo con chmod. Quale autorizzazione ha effettivamente bisogno di nginx sul file? Read-Only non sembra abbastanza. L'accesso completo sembra eccessivo. –

+0

@ ST-DDT non è una buona idea accedere ai file 'root' da Nginx, qualunque sia il loro permesso. Usare 'chown' è una scelta molto migliore qui. – Jivan

Problemi correlati