title: Nginx upload progress module error after file is uploaded
body: <p>when i upload a file with nginx upload progress module file starts uploading normally , then i get the progress how much is uploaded , but when the file upload finishes i get  error (<code>({ "state" : "error", "status" : 17523466568084 });</code>) </p>
  
  <p>Well , my wild guess is that in my config is specified backend  <code>upload_pass /upload;</code> , which i don't have , and everytime it uploads file  at the end it tries to get this backend and gives me error as it doesn't exist. I tried to comment out this line , but then i get another error from nginx  ( <strong>"track_uploads" directive track_upload should be the last directive in the location, after either proxy_pass or fastcgi_pass in /etc/nginx/sites-enabled/web-files.com:52</strong>).</p>
  
  <p>1)<strong>So</strong> the first question is what's the error ? </p>
  
  <p>2)<strong>Second</strong> is how can i get those parameters passed from nginx to backend in backend.</p>
  
  <p>Maybe someone has any ideas what's the matter.</p>
  
  <p>My nginx conf:</p>
  
  <pre><code>http {
     ...
     upload_progress upload 2m;
  
  server {
  
      listen 80;
      server_name   mydomain;
  
      root /home/cha0s/web-files;
      index index.php;
  
      location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME /home/cha0s/web-files$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_script_name;
  
      }
  
      location ~ ^/files/(.*)$ {
              alias /home/cha0s/$1;
              internal;
      }
  
      location = /upload/share {
        client_max_body_size 250m;
  
        #Specify backend location/url and directory for file upload
        upload_pass /upload;
        upload_store /tmp;
  
        # Declare variables which are passed to backend
        upload_set_form_field $upload_field_name.name "$upload_file_name";
        upload_set_form_field $upload_field_name.content_type "$upload_content_type";
        upload_set_form_field $upload_field_name.path "$upload_tmp_path";
  
        upload_aggregate_form_field "$upload_field_name.md5" "$upload_file_md5";
        upload_aggregate_form_field "$upload_field_name.size" "$upload_file_size";
  
  
        # Delete uploaded file on error
        upload_cleanup 400 404 499 500-505;
  
        # Limit upload speed
        upload_limit_rate 8k;
  
  
        track_uploads upload 1m;
      }
  
      location = /upload/status {
        report_uploads upload;
      }
  
  }
  }
  </code></pre>
  
  <p>My test.php:</p>
  
  <pre><code>&lt;!doctype html&gt;
  &lt;html lang="ru"&gt;
    &lt;head&gt;
      &lt;meta charset="utf-8"&gt;
      &lt;script&gt;
        function add() {
          if (parseInt(document.getElementById('count').getAttribute('value')) &lt; 8) {
            var input = document.createElement('input');
            input.setAttribute('type','file');
            input.setAttribute('multiple','');
            input.setAttribute('name','file[]');
            document.getElementById('multiple').appendChild(input);
            document.getElementById('multiple').appendChild(document.createElement('br'));
            document.getElementById('count').setAttribute('value',parseInt(document.getElementById('count').getAttribute('value'))+1);
          }
          else {
            alert('Можно загрузить не более 8 файлов за раз.');
          }
        }
        function progress() {
          var ms = new Date().getTime() / 1000;
          rq = 0;
          id = "";
          for (i = 0; i &lt; 32; i++) {
            id += Math.floor(Math.random() * 16).toString(16);
          }
          document.getElementById('upload').action = "/upload/share?X-Progress-ID=" + id;
          document.getElementById('status').style.display = 'block'
          interval = window.setInterval(function () { fetch(id, ms); }, 1000);
          return true;
        }
        function fetch(id, ms) {
          var fetch = new XMLHttpRequest();
          fetch.open("GET", "/upload/status", 1);
          fetch.setRequestHeader("X-Progress-ID", id);
          fetch.onreadystatechange = function () {
            if (fetch.readyState == 4) {
              if (fetch.status == 200) {
                var now = new Date().getTime() / 1000;
                var upload = eval(fetch.responseText);
                if (upload.state == 'uploading') {
                  var diff = upload.size - upload.received;
                  var rate = upload.received / upload.size;
                  var elapsed = now - ms;
                  var speed = upload.received - rq; rq = upload.received;
                  var remaining = (upload.size - upload.received) / speed;
                  var uReceived = parseInt(upload.received) + ' bytes';
                  var uDiff = parseInt(diff) + ' bytes';
                  var tTotal = parseInt(elapsed + remaining) + ' secs';
                  var tElapsed = parseInt(elapsed) + ' secs';
                  var tRemaining = parseInt(remaining) + ' secs';
                  var percent = Math.round(100*rate) + '%';
                  var uSpeed = speed + ' bytes/sec';
                  document.getElementById('length').firstChild.nodeValue = parseInt(upload.size) + ' bytes';
                  document.getElementById('sent').firstChild.nodeValue = uReceived;
                  document.getElementById('offset').firstChild.nodeValue = uDiff;
                  document.getElementById('total').firstChild.nodeValue = tTotal;
                  document.getElementById('elapsed').firstChild.nodeValue = tElapsed;
                  document.getElementById('remaining').firstChild.nodeValue = tRemaining;
                  document.getElementById('speed').firstChild.nodeValue = uSpeed;
                  document.getElementById('bar').firstChild.nodeValue = percent;
                  document.getElementById('bar').style.width = percent
                }
                else {
                  window.clearTimeout(interval);
                }
              }
            }
          }
          fetch.send(null);
        }
      &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
      &lt;form method="post" enctype="multipart/form-data" id="upload" onsubmit="progress();"&gt;
        &lt;input type="hidden" id="count" value="1" /&gt;
        &lt;div id="multiple"&gt;
          &lt;input type="file" name="file[]" multiple /&gt;&lt;br&gt;
        &lt;/div&gt;
        &lt;input type="submit"&gt;
        &lt;a href="#" onclick="add();"&gt;add();&lt;/a&gt;
      &lt;/form&gt;
      &lt;div id="status" style="display: none;"&gt;
        &lt;table width="100%"&gt; 
          &lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;загрузка&lt;/th&gt;&lt;th&gt;осталось&lt;/th&gt;&lt;th&gt;всего&lt;/th&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;время:&lt;/td&gt;&lt;td id="elapsed"&gt;∞&lt;/td&gt;&lt;td id="remaining"&gt;∞&lt;/td&gt;&lt;td id="total"&gt;∞&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;размер:&lt;/td&gt;&lt;td id="sent"&gt;0 b&lt;/td&gt;&lt;td id="offset"&gt;0 b&lt;/td&gt;&lt;td id="length"&gt;0 b&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;скорость:&lt;/td&gt;&lt;td id="speed"&gt;n/a&lt;/td&gt;&lt;/tr&gt;
        &lt;/table&gt;
        &lt;div style="border: 1px solid #c0c0c0;"&gt;
          &lt;div style="background: #c0c0c0; width: 0%; text-align: right;" id="bar"&gt;0%&lt;/div&gt;
        &lt;/div&gt;
        &lt;a href="#" onclick="if (confirm('Вы точно хотите отменить загрузку?')) window.location = '/'" id="cancel"&gt;cancel_upload();&lt;/a&gt;
      &lt;/div&gt;
    &lt;/body&gt;
  &lt;/html&gt;
  </code></pre>