58

I'm getting the following error on my chrome console:

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

This only happens when a simultaneous requests are shot towards nginx e.g. when the browsers cache is empty and the whole app loads. Loading the resource above as a single requests succeeds.

Here are the headers to this requests, copied from 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

the real size of the file:

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

As you can see Content-Length and the real size of the file are the same, so that's weird

And the nginx configuration to this proxy:

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

Any ideas?

Thanks

EDIT: found more info on the error log:

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/"
amit
  • 1,991
  • 1
  • 18
  • 29

16 Answers16

59

Adding the following line to the nginx config was the only thing that fixed the net::ERR_CONTENT_LENGTH_MISMATCH error for me:

proxy_buffering off;
Miguel Mota
  • 20,135
  • 5
  • 45
  • 64
42

It seems that under pressure, nginx tried to pull angular.js from its cache and couldn't due to permission issues. Here's what solved this issue:

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

_www:admin might be different in your case, depending which user owns the nginx process. See more information on ServerFault:

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

Community
  • 1
  • 1
amit
  • 1,991
  • 1
  • 18
  • 29
  • 2
    Thanks for the tip, I ran into this with my HomeBrew nginx after upgrading to El Capitan – Jonathan del Strother Oct 07 '15 at 09:52
  • I'm glad it's still helpful! – amit Oct 07 '15 at 11:12
  • 2
    In case anybody is still running into this problem - you might need to double check the user under which `nginx` is running. In my case, the folder was with the proper permissions and ownership, but simply nginx was running under `nobody.nobody`. – tftd Nov 05 '15 at 16:00
  • @amitkapit : Could you post how to resolve this issue in Ubuntu 14.04 LTS ? – Kamalakannan J Jan 09 '16 at 20:03
  • @sincerekamal the solution above should work for any kind of Linux, including Ubuntu of course. See tftd 's helpful comment here as well. Just make sure that all file ownerships make sense and it should all work – amit Jan 12 '16 at 10:32
  • @amitkapit i don't understand what is that _www:admin proxy_temp means – Kamalakannan J Jan 12 '16 at 12:29
  • 8
    This was the key to getting nginx and browserSync working together to serve an AngularJS project. If you've installed nginx via homebrew and all the defaults on OSX, it should be `sudo chown -R nobody:admin /usr/local/var/run/nginx/proxy_temp`. My hunch is this problem was created by switching to running nginx via launchctl as root instead of $USER. – notbrain Feb 28 '16 at 03:52
  • Thanks, your answer was helpful to me when I got a similar error. On CentOs, the proxy_temp directory is located here: /var/cache/nginx/proxy_temp/ I just deleted the contents of that directory and my problem was solved. – Erik Hansen Mar 07 '16 at 22:37
  • In my case, I chown to my user account. You may check with `ps aux | grep nginx` to see who is running nginx. – aGuegu Mar 08 '16 at 12:32
33

I tried all of the above and still couldn't get it to work. Even after resorting to chmod 777. The only thing that solved it for me was to disable caching entirely:

proxy_max_temp_file_size 0;

Whilst not a fix and no good for production use this was OK for me since I'm only using nginx as part of a local development setup.

djskinner
  • 8,035
  • 4
  • 49
  • 72
24

For me the remedy were these two settings:

In the file: /etc/nginx/nginx.conf

Add:

proxy_max_temp_file_size 0;
proxy_buffering off;

Between the lines client_max_body_size 128M; and 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;
algenib
  • 349
  • 2
  • 4
  • 1
    Why do you need `proxy_max_temp_file_size` in addition to `proxy_buffering`? The documentation for `proxy_max_temp_file_size` states `When buffering of responses from the proxied server is enabled`, implying there is no effect when `proxy_buffering off`: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_max_temp_file_size – Justin Raymond Jul 14 '20 at 20:35
  • As @JustinRaymond mentioned you don't need these two things together. And it really do makes sense to think about the consequences of the setup. – Lukasz Siemiradzki Dec 27 '20 at 12:00
10
ps aux | grep "nginx: worker process"

after executing above command you'll see the user through which nginx is running

eg.

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

now you have to run below command to give permission

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

Hope it will work

karlsebal
  • 1,449
  • 17
  • 23
Niyaz Ahamad
  • 154
  • 1
  • 5
3

For us, it turned out to be that our server's rather small root (ie. /) was full.

It had mountains of logs and files from users in /home. Moving all that cruft out to another mounted drive solved things.

Just wanted to share as this can be another cause of the problem.

AndrewWhalan
  • 417
  • 3
  • 12
3

If somebody ran nginx as a different user in the past, ownership of cache folder may be twisted. I got

/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

while nginx was running as www-data. So the solution is to change ownership of nginx’s cache directory to the user nginx is running under. In the present case

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

or, even simpler

# rm -r /var/cache/nginx/*
karlsebal
  • 1,449
  • 17
  • 23
1

What worked for me was to change the proxy_temp_path to a folder with read/write permissions (777)

location / {
    proxy_temp_path /data/tmp;
}
Chanrith
  • 113
  • 1
  • 3
  • 1
    Changing permissions to 777 is unsafe and you shouldn't do it in any server that is open to the internet! – amit Jun 06 '17 at 10:03
1

I had same issue. Increasing the space of Directory or Folder where nginx is installed, solved the issue.

1

For macOS with nginx installed with homebrew, I used the following steps to track down and fix the issue.

Run nginx -h to find your error log location. Look for the following line:

-e filename : set error log file (default: /opt/homebrew/var/log/nginx/error.log)

Take your error log path and tail it to see what error it's reporting when you try to load the page.

tail -f /opt/homebrew/var/log/nginx/error.log

From that I saw that one of the lines showed a permission denied error:

open() "/opt/homebrew/var/run/nginx/proxy_temp/9/01/0000000019" failed (13: Permission denied) while reading upstream

Which means that your cached directories have incorrect permissions for the nginx user.

Stop nginx

brew services stop nginx

Delete all the temp folders (location from the permission error log line)

sudo rm -rf /opt/homebrew/var/run/nginx/*

Start nginx again

brew services start nginx

After doing this, nginx will recreate the temp folders with the correct permissions. At this point you should be good try and reload your page that was failing before.

spencer.sm
  • 19,173
  • 10
  • 77
  • 88
0

When I tried the aforementioned solution it didn't fix the issue. I also changed the permission to write on the location but it didn't work. Then I realized I did something wrong in there. In the location to store the file, I had something like

"/storage" + fileName + ".csv"

. I was testing on the Windows environment and it was working great. But later when we moved the application to the Linux environment it stopped working. So later I had to change it to

"./storage" + fileName + ".csv"

and it started working normally.

Sandip Subedi
  • 1,039
  • 1
  • 14
  • 34
0

For me, the solution was:

sudo chown -R nginx:nginx /var/cache/nginx/fastcgi_temp/
Bert
  • 347
  • 7
  • 25
0

For anyone using HAProxy as proxy and getting these exact same symptoms, increasing the timeout values resolved the issue for me:

timeout connect 5000 timeout client 50000 timeout server 50000

mrsperls
  • 1
  • 2
0

The only thing that helped me was the following settings in nginx site .conf file:

proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
Dominique Fortin
  • 2,212
  • 15
  • 20
0

For me I had the same error except on a

different folder /var/lib/nginx/.

I changed the owner to nginx by

chown -R nginx:nginx /var/lib/nginx/. That did not work.

Then I checked who owned the nginx worker process by

ps aux| grep nginx

And it was running as nginx but when I looked through the nginx.conf file; I found that the user was nginx but it did not have any group. So, I added nginx to the user nginx; it turned out like this

user nginx nginx

Now I rebooted the system and the issue was fixed. I suppose I could have just used

chown -R nginx /var/lib/nginx/

That may have worked as well. So if anyone is facing this issue; firstly go into var/log/nginx and

check where the permission error occurred.

sakib11
  • 496
  • 1
  • 5
  • 20
0

I am facing the same issue today, the issue is come from the server nginx, first check your nginx run user and group from configuration file:

ps aux|grep nginx

this will show the nginx path and using nginx -V to find more info. the next keep the user and group be the same using this command:

sudo chown -R nobody ./proxy_temp
sudo chgrp -R admin ./proxy_temp

replace the path user group to your own.

Dolphin
  • 29,069
  • 61
  • 260
  • 539