web-dev-qa-db-fra.com

ERR_CONTENT_LENGTH_MISMATCH sur nginx et proxy sur Chrome lors du chargement de fichiers volumineux

Je reçois l'erreur suivante sur ma console chrome:

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

Cela ne se produit que lorsqu'une requête simultanée est dirigée vers nginx, par exemple. lorsque le cache des navigateurs est vide et que l’ensemble de l’application se charge. Le chargement de la ressource ci-dessus alors qu'une seule demande aboutit.

Voici les en-têtes de ces demandes, copiés à partir de 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 taille réelle du fichier:

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

Comme vous pouvez le voir, Content-Length et la taille réelle du fichier sont les mêmes, donc c'est bizarre

Et la configuration de nginx sur ce proxy:

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

Des idées?

Merci

EDIT: trouvé plus d'informations sur le journal des erreurs:

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

Il semble que sous la pression, nginx ait essayé d'extraire angular.js de son cache et ne pouvait pas en raison de problèmes d'autorisations. Voici ce qui a résolu ce problème:

root@amac-2:/usr/local/var/run/nginx $ chown -R _www:admin proxy_temp

_www:admin peut être différent dans votre cas, selon l'utilisateur qui possède le processus nginx. Voir plus d'informations sur ServerFault: 

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

35
amit

J'ai essayé tout ce qui précède et je ne pouvais toujours pas le faire fonctionner. Même après avoir eu recours à chmod 777. La seule chose que résolu pour moi a été de désactiver complètement la mise en cache:

proxy_max_temp_file_size 0;

Bien que ce ne soit pas un correctif et que ce ne soit pas bon pour une utilisation en production, c’était acceptable pour moi puisque je n’utilise que nginx dans le cadre d’une installation de développement local.

23
djskinner

L'ajout de la ligne suivante à nginx config a été la seule chose qui a corrigé l'erreur net::ERR_CONTENT_LENGTH_MISMATCH pour moi:

proxy_buffering off;
10
Miguel Mota

Pour moi, le remède était ces deux paramètres:

Dans le fichier: /etc/nginx/nginx.conf

Ajouter:

proxy_max_temp_file_size 0;
proxy_buffering off;

Entre les lignes client_max_body_size 128M; et 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"**

après avoir exécuté la commande ci-dessus, vous verrez l'utilisateur à travers lequel nginx est exécuté

par exemple.

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

maintenant vous devez exécuter la commande ci-dessous pour donner la permission

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

J'espère que ça va marcher

3
Niyaz Ahamad

Pour nous, il s’est avéré que la racine relativement petite de notre serveur (c.-à-d. /) Était pleine.

Il y avait des montagnes de journaux et de fichiers d'utilisateurs dans/home. Déplacer tout cela cruellement sur un autre lecteur monté a résolu les problèmes.

Je voulais juste partager car cela peut être une autre cause du problème.

1
AndrewWhalan

Ce qui a fonctionné pour moi a été de changer le chemin proxy_temp_path en un dossier avec des autorisations de lecture/écriture (777).

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

Lorsque j'ai essayé la solution susmentionnée, le problème n'a pas été résolu. J'ai également changé l'autorisation d'écrire sur l'emplacement, mais cela n'a pas fonctionné. Puis j'ai réalisé que j'avais fait quelque chose de mal là-dedans. À l'emplacement de stockage du fichier, j'avais quelque chose comme 

"/ storage" + NomFichier + ".csv"

. Je testais sur l'environnement Windows et cela fonctionnait très bien. Mais plus tard, lorsque nous avons déplacé l'application vers l'environnement Linux, celle-ci a cessé de fonctionner. Alors plus tard je devais le changer pour 

"./storage" + nom_fichier + ".csv"

et cela a commencé à fonctionner normalement.

0
Sandip Subedi

Pour moi, la solution était:

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