2014-09-23 20 views
23

sto ottenendo il seguente errore sulla mia console cromata:ERR_CONTENT_LENGTH_MISMATCH su nginx e delega su Chrome durante il caricamento di file di grandi dimensioni

GET http://localhost/grunt/vendor/angular/angular.js net::ERR_CONTENT_LENGTH_MISMATCH 

Questo accade solo quando un simultanee richieste sono girati verso nginx esempio quando la cache del browser è vuota e viene caricata l'intera app. Caricamento della risorsa sopra come succede una singola richiesta.

Ecco le intestazioni a questo richieste, copiati da Chrome:

Remote Address:127.0.0.1:80 
Request URL:http://localhost/grunt/vendor/angular/angular.js 
Request Method:GET 
Status Code:200 OK 
Request Headersview source 
Accept:*/* 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8,de;q=0.6,pl;q=0.4,es;q=0.2,he;q=0.2,gl;q=0.2 
Cache-Control:no-cache 
Connection:keep-alive 
Cookie:gs_u_GSN-265185-D=1783247335:2567:5000:1377697930719 
Host:localhost 
Pragma:no-cache 
Referer:http://localhost/grunt/ 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.122 Safari/537.36 
Response Headersview source 
Accept-Ranges:bytes 
Cache-Control:public, max-age=0 
Connection:keep-alive 
Content-Length:873444 
Content-Type:application/javascript 
Date:Tue, 23 Sep 2014 11:08:19 GMT 
ETag:"873444-1411465226000" 
Last-Modified:Tue, 23 Sep 2014 09:40:26 GMT 
Server:nginx/1.6.0 

la dimensione reale del file:

$ ll vendor/angular/angular.js 
-rw-rw-r-- 1 xxxx staff 873444 Aug 30 07:21 vendor/angular/angular.js 

Come si può vedere Content-Length e la dimensione reale del file vengono lo stesso, quindi è strano

E la configurazione di nginx a questo proxy:

location /grunt/ { 
    proxy_pass http://localhost:9000/; 
} 

Qualche idea?

Grazie

EDIT: trovati più informazioni del log degli errori:

2014/09/23 13:08:19 [crit] 15435#0: *8 open() "/usr/local/var/run/nginx/proxy_temp/1/00/0000000001" failed (13: Permission denied) while reading upstream, client: 127.0.0.1, server: localhost, request: "GET /grunt/vendor/angular/angular.js HTTP/1.1", upstream: "http://127.0.0.1:9000/vendor/angular/angular.js", host: "localhost", referrer: "http://localhost/grunt/" 

risposta

32

Sembra che sotto pressione, nginx cercò di angular.js dalla cache e non poteva a causa di problemi di autorizzazione. Ecco cosa ha risolto questo problema:

[email protected]:/usr/local/var/run/nginx $ chown -R _www:admin proxy_temp 

_www:admin potrebbe essere diverso nel vostro caso, a seconda che l'utente possiede il processo di nginx. Vedere ulteriori informazioni su ServerFault:

https://serverfault.com/questions/534497/why-do-nginx-process-run-with-user-nobody

+2

Grazie per la punta, mi sono imbattuto in questo con il mio nginx HomeBrew dopo l'aggiornamento a El Capitan –

+0

Sono contento che sia ancora utile! – amit

+2

Nel caso in cui qualcuno stia ancora incontrando questo problema, potrebbe essere necessario ricontrollare l'utente in cui 'nginx' è in esecuzione. Nel mio caso, la cartella era con le autorizzazioni e la proprietà appropriate, ma semplicemente nginx era in esecuzione in "nobody.nobody". – tftd

19

ho provato tutto quanto sopra e ancora non sono riuscito a farlo funzionare. Anche dopo il ricorso a chmod 777. L'unica cosa che risolto per me è stato quello di disabilitare la cache del tutto:

proxy_max_temp_file_size 0;

Pur non essendo una correzione e non va bene per l'uso in produzione questo era ok per me dato che sto usando solo nginx come parte di una configurazione di sviluppo locale.

0

Quando ho provato la soluzione di cui sopra, non è stato risolto il problema. Ho anche cambiato il permesso di scrivere sulla posizione ma non ha funzionato. Poi ho capito che ho fatto qualcosa di sbagliato lì dentro. Nella posizione in cui memorizzare il file, ho avuto qualcosa di simile

"/ stoccaggio" + fileName + ".csv"

. Stavo testando l'ambiente Windows e funzionava alla grande. Ma più tardi, quando abbiamo spostato l'applicazione nell'ambiente Linux, ha smesso di funzionare. Così dopo ho dovuto cambiarlo in

"./storage" + fileName + ".csv"

ed ha iniziato a lavorare normalmente.

1

Quello che ha funzionato per me è stato quello di cambiare il proxy_temp_path in una cartella con permessi di lettura/scrittura (777)

location/{ 
    proxy_temp_path /data/tmp; 
} 
+0

Cambiare le autorizzazioni per 777 non è sicuro e non dovresti farlo in nessun server aperto a Internet! – amit

1

Aggiunta la seguente riga la configurazione nginx era l'unica cosa che ha fissato l'errore di net::ERR_CONTENT_LENGTH_MISMATCH per me:

proxy_buffering off; 
0

per noi, tu si è scoperto che la radice piuttosto piccola del nostro server (es. /) era pieno.

Aveva montagne di log e file da utenti in/home. Spostare tutto ciò che veniva fuori su un'altra unità montata risolveva le cose.

Volevo solo condividere come questo può essere un'altra causa del problema.

Problemi correlati