Hello,

nginx 1.4.1 is truncating proxy output for large files.


*** Steps to reproduce ***

nginx.conf:

    location ^~ /download/ {
        proxy_pass        http://localhost:9000;
        proxy_set_header  Host $host;
    }

The back end is a very simple servlet that copies a static file to the output stream. The test file is 7147652 bytes. Small files are delivered correctly,


*** Test results ***

First to show that the back end is sending a full file access it directly on port 9000:

$ curl http://domain.local:9000/download/file.pdf | wc
  % Total    % Received % Xferd  Average Speed   Time    Time Time  Current
                                 Dload  Upload   Total   Spent Left  Speed
100 6980k 0 6980k 0 0 39.3M 0 --:--:-- --:--:-- --:--:-- 39.6M
   39699  166238 7147652

7147652 bytes delivered correctly.


Example of failure, request via nginx:

$ curl http://domain.local/download/file.pdf | wc
  % Total    % Received % Xferd  Average Speed   Time    Time Time  Current
                                 Dload  Upload   Total   Spent Left  Speed
100 167k 0 167k 0 0 5779k 0 --:--:-- --:--:-- --:--:-- 5992k
    1959    3853  171828

Only 171828 bytes delivered.



By restricting the download speed more bytes are delivered, slower is better, eg:

$ curl --limit-rate 200k http://domain.local/download/file.pdf | wc
  % Total    % Received % Xferd  Average Speed   Time    Time Time  Current
                                 Dload  Upload   Total   Spent Left  Speed
100 6980k 0 6980k 0 0 200k 0 --:--:-- 0:00:34 --:--:-- 200k
   39699  166238 7147652



*** Workaround ***

Add limit-rate to nginx.conf:

    location ^~ /download/ {
        proxy_pass        http://localhost:9000;
        proxy_set_header  Host $host;
        limit_rate        1000k;
    }

$ curl http://domain.local/download/file.pdf | wc
  % Total    % Received % Xferd  Average Speed   Time    Time Time  Current
                                 Dload  Upload   Total   Spent Left  Speed
100 6980k 0 6980k 0 0 1000k 0 --:--:-- 0:00:06 --:--:-- 1001k
   39699  166238 7147652

Full 7147652bytes delivered


*** Other information ***

This is similar to:
http://mailman.nginx.org/pipermail/nginx/2012-April/033272.html
The workaround for this was also set a limit rate in nginx.conf.


nginx 1.4.1
Solaris 10u11




James.

_______________________________________________
nginx mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx

Reply via email to