it-swarm.com.de

ERR_CONTENT_LENGTH_MISMATCH unter nginx und Proxy unter Chrome beim Laden großer Dateien

Ich erhalte folgende Fehlermeldung auf meiner Chrome-Konsole:

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

Dies geschieht nur, wenn gleichzeitig Anfragen auf Nginx gerichtet werden, z. Wenn der Browser-Cache leer ist und die gesamte App geladen wird. Das Laden der Ressource oben als eine einzelne Anforderung ist erfolgreich.

Hier sind die Überschriften zu diesen Anforderungen, die aus Chrome kopiert wurden:

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

die tatsächliche Größe der Datei:

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

Wie Sie sehen, sind Content-Length und die tatsächliche Größe der Datei gleich, also ist das komisch

Und die Nginx-Konfiguration für diesen Proxy:

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

Irgendwelche Ideen?

Vielen Dank

BEARBEITEN: Weitere Informationen zum Fehlerprotokoll gefunden:

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/"
28
amit

Es scheint, dass nginx unter Druck versucht hat, angular.js aus dem Cache zu ziehen, und dies aufgrund von Berechtigungsproblemen nicht möglich war. Hier ist das Problem gelöst:

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

_www:admin kann in Ihrem Fall unterschiedlich sein, abhängig davon, welcher Benutzer den nginx-Prozess besitzt. Weitere Informationen zu ServerFault: 

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

35
amit

Ich habe alles ausprobiert und konnte es immer noch nicht schaffen. Auch nach chmod 777. Das einzige, was gelöst es für mich war, war, das Caching komplett zu deaktivieren:

proxy_max_temp_file_size 0;

Obwohl es keine Korrektur und keine gute Lösung für die Produktion gab, war dies für mich in Ordnung, da ich Nginx nur als Teil einer lokalen Entwicklungsumgebung verwende.

23
djskinner

Das Hinzufügen der folgenden Zeile zur nginx config war das einzige, was den net::ERR_CONTENT_LENGTH_MISMATCH-Fehler für mich behoben hat:

proxy_buffering off;
10
Miguel Mota

Für mich waren diese beiden Einstellungen die Abhilfe:

In der Datei: /etc/nginx/nginx.conf

Hinzufügen:

proxy_max_temp_file_size 0;
proxy_buffering off;

Zwischen den Zeilen client_max_body_size 128M; und server_names_hash_bucket_size 256;:

http {

client_max_body_size 128M;
proxy_max_temp_file_size 0;
proxy_buffering off;
server_names_hash_bucket_size 256;
5
algenib
**ps aux | grep "nginx: worker process"**

nachdem Sie den obigen Befehl ausgeführt haben, sehen Sie den Benutzer, durch den Nginx läuft

z.B.

www-data 25356  0.0  0.0  68576  4800 ?        S    12:45   0:00 nginx: worker process

www-data 25357  0.0  0.0  68912  5060 ?        S    12:45   0:00 nginx: worker process

jetzt müssen Sie den folgenden Befehl ausführen, um die Berechtigung zu erteilen

**chown -R www-data:www-data /var/lib/nginx/**

Ich hoffe es wird klappen

3
Niyaz Ahamad

Für uns stellte sich heraus, dass der recht kleine root (dh. /) Unseres Servers voll war.

Es gab Berge von Protokollen und Dateien von Benutzern in/home. Wenn Sie den ganzen Krümel auf ein anderes Laufwerk auslagern, wurden Probleme gelöst.

Ich wollte nur teilen, da dies eine weitere Ursache des Problems sein kann.

1
AndrewWhalan

Was für mich funktionierte, war, den Proxy_temp_path in einen Ordner mit Lese- und Schreibberechtigungen zu ändern (777).

location / {
    proxy_temp_path /data/tmp;
}
1
Chanrith

Als ich die oben genannte Lösung ausprobierte, wurde das Problem nicht behoben. Ich habe auch die Erlaubnis geändert, an dem Ort zu schreiben, aber es hat nicht funktioniert. Dann wurde mir klar, dass ich dort etwas falsch gemacht habe. Am Ort, um die Datei zu speichern, hatte ich so etwas 

"/ storage" + Dateiname + ".csv"

. Ich habe in der Windows-Umgebung getestet und es hat super funktioniert. Später, als wir die Anwendung in die Linux-Umgebung verschoben haben, funktionierte sie nicht mehr. Also musste ich es später ändern 

"./storage" + Dateiname + ".csv"

und es begann normal zu arbeiten.

0
Sandip Subedi

Für mich war die Lösung:

Sudo chown -R nginx:nginx /var/cache/nginx/fastcgi_temp/
0
Bert