加载大文件时,nginx上的ERR_CONTENT_LENGTH_MISMATCH和Chrome上的代理

时间:2014-09-23 11:22:55

标签: google-chrome nginx proxy

我在Chrome控制台上收到以下错误:

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

这仅在向nginx发送同时请求时发生,例如当浏览器缓存为空并且整个应用程序加载时。将上面的资源作为单个请求加载成功。

以下是从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

文件的实际大小:

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

正如您所见,Content-Length并且文件的实际大小相同,所以很奇怪

此代理的nginx配置:

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

有什么想法吗?

由于

编辑:在错误日志中找到更多信息:

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

14 个答案:

答案 0 :(得分:35)

似乎在压力下,nginx试图从其缓存中提取angular.js并且由于权限问题而无法解决问题。这是解决这个问题的原因:

root@amac-2:/usr/local/var/run/nginx $ chown -R _www:admin proxy_temp
在您的情况下,

_www:admin可能会有所不同,具体取决于哪个用户拥有nginx进程。查看有关ServerFault的更多信息:

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

答案 1 :(得分:24)

我尝试了以上所有内容但仍无法使其正常运行。即使在诉诸chmod 777之后。 解决它对我来说唯一的事情是完全禁用缓存:

proxy_max_temp_file_size 0;

虽然不是修复,也不适合生产使用,但这对我来说没问题,因为我只使用nginx作为本地开发设置的一部分。

答案 2 :(得分:12)

将以下行添加到nginx配置是我唯一能解决net::ERR_CONTENT_LENGTH_MISMATCH错误的问题:

proxy_buffering off;

答案 3 :(得分:9)

对我来说,补救措施是这两个设置:

在文件中:     /etc/nginx/nginx.conf

添加:

proxy_max_temp_file_size 0;
proxy_buffering off;

client_max_body_size 128M;行和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;

答案 4 :(得分:4)

**ps aux | grep "nginx: worker process"**

执行上述命令后,您将看到正在运行nginx的用户

例如

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

现在您必须运行以下命令来授予权限

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

希望它会起作用

答案 5 :(得分:1)

对我来说有用的是将proxy_temp_path更改为具有读/写权限的文件夹(777)

location / {
    proxy_temp_path /data/tmp;
}

答案 6 :(得分:1)

对我们来说,事实证明我们服务器的相当小的根(即。/)已满。

来自/ home的用户拥有大量日志和文件。将所有那些残余物移到另一个装载的驱动器上解决了问题。

只是想分享,因为这可能是问题的另一个原因。

答案 7 :(得分:1)

我有同样的问题。 增大安装了nginx的目录文件夹的空间,解决了该问题。

答案 8 :(得分:1)

如果过去有人以其他用户身份运行nginx,则缓存文件夹的所有权可能会发生变化。我有

/var/cache/nginx# LANG=C ls -l proxy_temp/
total 40
drwx------ 18 nginx nginx 4096 Jul 14  2016 0
drwx------ 19 nginx nginx 4096 Jul 14  2016 1
drwx------ 19 nginx nginx 4096 Jul 14  2016 2
drwx------ 19 nginx nginx 4096 Jul 14  2016 3
drwx------ 19 nginx nginx 4096 Jul 14  2016 4
drwx------ 19 nginx nginx 4096 Jul 14  2016 5
drwx------ 19 nginx nginx 4096 Jul 14  2016 6
drwx------ 18 nginx nginx 4096 Jul 14  2016 7
drwx------ 18 nginx nginx 4096 Jul 14  2016 8
drwx------ 18 nginx nginx 4096 Jul 14  2016 9

nginx以www-data的身份运行。因此,解决方案是将nginx缓存目录的所有权更改为nginx在其下运行的用户。在当前情况下

/var/cache/nginx# chown -R www-data:www-data *

或更简单

# rm -r /var/cache/nginx/*

答案 9 :(得分:0)

当我尝试上述解决方案时,它没有解决问题。我也改变了在该位置写入的权限,但它没有用。然后我意识到我在那里做错了什么。在存储文件的位置,我有类似

的东西
  

“/ storage”+ fileName +“。csv”

。我正在测试Windows环境,它运行良好。但后来当我们将应用程序移动到Linux环境时,它停止了工作。所以后来我不得不把它改成

  

“./ storage”+ fileName +“。csv”

它开始正常工作。

答案 10 :(得分:0)

对我来说,解决方案是:

sudo chown -R nginx:nginx /var/cache/nginx/fastcgi_temp/

答案 11 :(得分:0)

对于任何使用HAProxy作为代理并得到这些完全相同的症状的人,增加超时值可以为我解决问题:

超时连接5000 超时客户端50000 超时服务器50000

答案 12 :(得分:0)

唯一帮助我的是nginx网站.conf文件中的以下设置:

proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;

答案 13 :(得分:0)

对我来说,除了在

上,我有相同的错误

不同的文件夹/var/lib/nginx/

我将所有者更改为nginx,

chown -R nginx:nginx /var/lib/nginx/。那没用。

然后我检查了谁拥有nginx worker process

ps aux| grep nginx

它以nginx的形式运行,但是当我浏览nginx.conf文件时;我发现用户是nginx,但没有任何组。因此,我向用户nginx添加了nginx;原来是这样

user nginx nginx

现在,我重新启动了系统,此问题已解决。我想我本来可以用

chown -R nginx /var/lib/nginx/

这可能也起作用。因此,如果有人面对这个问题;首先进入var/log/nginx

检查权限错误发生的位置