ERR_CONTENT_LENGTH_MISMATCH sur nginx et proxy sur google Chrome lors du chargement de gros fichiers
J'obtiens le message d'erreur suivant sur ma console chromée:
GET http://localhost/grunt/vendor/angular/angular.js net::ERR_CONTENT_LENGTH_MISMATCH
Cela n'arrive que lorsqu'un de requêtes simultanées sont tournés vers nginx par exemple, lorsque les navigateurs cache est vide et l'ensemble de l'application des charges. Chargement de la ressource ci-dessus comme un seul des demandes réussit.
Ici sont les en-têtes de cette demande, copié à 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
de 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 de la taille réelle du fichier sont les mêmes, donc c'est bizarre
Et de configuration de nginx pour ce proxy:
location /grunt/{
proxy_pass http://localhost:9000/;
}
Des idées?
Grâce
EDIT: trouvé plus d'info 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/"
Vous devez vous connecter pour publier un commentaire.
Il semble que, sous la pression, nginx essayé de tirer
angular.js
de son cache et ne pouvait pas en raison de problèmes d'autorisation. Voici ce que résolu ce problème:_www:admin
peut être différent dans votre cas, en fonction de l'utilisateur qui possède le processus de nginx. Voir plus d'informations sur ServerFault:https://serverfault.com/questions/534497/why-do-nginx-process-run-with-user-nobody
nginx
est en cours d'exécution. Dans mon cas, le dossier a été avec les autorisations appropriées et à la propriété, mais simplement de nginx était en cours d'exécution en vertu de l'nobody.nobody
.sudo chown -R nobody:admin /usr/local/var/run/nginx/proxy_temp
. A mon avis, ce problème a été créé par le passage à l'exécution de nginx via launchctl en tant que root au lieu de $UTILISATEUR.ps aux | grep nginx
pour voir qui est en cours d'exécution de nginx.J'ai essayé tous les ci-dessus et encore ne pouvait pas le faire fonctionner. Même après avoir eu recours à
chmod 777
. La seule chose qui résolu pour moi a été de désactiver la mise en cache:proxy_max_temp_file_size 0;
Bien que n'étant pas un fix et pas bon pour une utilisation en production, c'est OK pour moi depuis que je suis seulement en utilisant nginx dans le cadre d'un développement local de l'installation.
Ajoutant la ligne suivante à la config nginx était la seule chose qui fixe le
net::ERR_CONTENT_LENGTH_MISMATCH
erreur pour moi:Pour moi, le remède était ces deux paramètres:
Dans le fichier:
/etc/nginx/nginx.conf
Ajouter:
Entre les lignes
client_max_body_size 128M;
etserver_names_hash_bucket_size 256;
:après l'exécution de la commande ci-dessus, vous verrez l'utilisateur à travers lequel nginx est en cours d'exécution
par exemple.
maintenant, vous devez exécuter la commande ci-dessous pour donner l'autorisation
Espère que cela va fonctionner
Ce qui a fonctionné pour moi a été de changer le proxy_temp_path à un dossier avec des autorisations de lecture/écriture (777)
Pour nous, il s'est avéré que notre serveur est plutôt petite racine (ie. /) est complet.
Il avait des montagnes de journaux et les fichiers de l'utilisateur dans /home. Déplacement de tous les trucs que par un autre lecteur monté résolu choses.
Voulais juste partager ce qui peut être une autre cause du problème.
Quand j'ai essayé de ladite solution, il n'a pas de résoudre le problème. J'ai aussi changé la permission d'écrire sur l'emplacement mais il ne fonctionne pas. Puis j'ai réalisé que j'ai fait quelque chose de mal là-dedans. Dans l'emplacement pour stocker le fichier, j'ai eu quelque chose comme
. J'ai été le tester sur l'environnement Windows et il a été génial de travailler. Mais plus tard, quand nous avons déménagé l'application à l'environnement Linux il a cessé de travailler. Plus tard, j'ai dû changer de
et il a commencé à travailler normalement.
Pour moi, la solution a été: