Analisei minhas configurações para um exemplo prático. Eu uso módulos de upload e faço o upload do progresso de tal maneira:
upload_progress proxied 4m;
...
server {
...
location ^~ /progress {
report_uploads proxied;
}
location ^~ /services/ {
rewrite ^/(.*?)/?$ /$1.php break;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
}
location ^~ /upd/ {
upload_pass /services/upload/;
upload_pass_args on;
upload_store_access group:rw;
upload_store /tmp;
set $upload_field_name file;
upload_set_form_field $upload_field_name.name "$upload_file_name";
upload_set_form_field $upload_field_name.path "$upload_tmp_path";
upload_aggregate_form_field "$upload_field_name.size" "$upload_file_size";
upload_cleanup 400 404 499 500-505;
track_uploads proxied 30s;
}
}
Veja também a aba Net do firebug. Veja se o seu código obtém uma saída json correta. Talvez o problema esteja realmente no lado do cliente.