我在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/"
答案 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
和
检查权限错误发生的位置 。