Forum: NGINX Upload Progress

Posted by Matt M (Guest)
on 2012-12-11 23:19
(Received via mailing list)
Hello,

I recently installed http://wiki.nginx.org/HttpUploadProgressModule
with nginx 1.2.6.

On the client side I have a request coming every second to check on
the upload status. As I watch the access.log I can see all of the
status check requests before the actual file post shows up in the
access log.

I am wondering if that is normal or should I see the file post show up
in the access log then the status check requests after that?
Posted by Maxim Dounin (Guest)
on 2012-12-12 09:36
(Received via mailing list)
Hello!

On Tue, Dec 11, 2012 at 04:18:01PM -0600, Matt M wrote:

> I am wondering if that is normal or should I see the file post show up
> in the access log then the status check requests after that?

It's normal.  Logging happens after a request processing is
complete, after sending the response, and hence status check
requests are logged before the file post.

--
Maxim Dounin
http://nginx.com/support.html
Posted by Matt M (Guest)
on 2012-12-12 13:10
(Received via mailing list)
Thanks for the response.

On Wed, Dec 12, 2012 at 2:36 AM, Maxim Dounin <mdounin@mdounin.ru> 
wrote:
>> the upload status. As I watch the access.log I can see all of the
>> status check requests before the actual file post shows up in the
>> access log.
>>
>> I am wondering if that is normal or should I see the file post show up
>> in the access log then the status check requests after that?
>
> It's normal.  Logging happens after a request processing is
> complete, after sending the response, and hence status check
> requests are logged before the file post.

I am curious. The status never gets past "starting" in the progress
response. Where should I look to try to debug this? I am not very good
at system admin.
Posted by Sokolov Evgeniy (Guest)
on 2012-12-13 03:56
(Received via mailing list)
Hi!

If you compile your nginx with debug - enable debug logging, restart 
nginx
and you will see messages from upload module, it is very helpful.

Also read this note
http://wiki.nginx.org/HttpUploadProgressModule#track_uploads - "The POST 
*
must* have a query parameter called *X-Progress-ID"... *If the POST has 
no
such information, the upload will not be tracked....


2012/12/12 Matt M <h.dudeness@gmail.com>
Posted by Matt M (Guest)
on 2012-12-13 15:27
(Received via mailing list)
Hi! Thanks for the response.

On Wed, Dec 12, 2012 at 8:56 PM, Sokolov Evgeniy <ewgraf@gmail.com> 
wrote:
> Hi!
>
> If you compile your nginx with debug - enable debug logging, restart nginx
> and you will see messages from upload module, it is very helpful.
>
> Also read this note
> http://wiki.nginx.org/HttpUploadProgressModule#track_uploads - "The POST
> must have a query parameter called X-Progress-ID"... If the POST has no such
> information, the upload will not be tracked....

I have double checked and I can see the post variable X-Progress-ID
coming with the upload but the status just stays at starting. My
nginx.conf looks like this:
worker_processes  1;

events {
    worker_connections  1024;
}


http {
#error_log /usr/local/nginx/logs/error.log debug;
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    tcp_nopush    on;
    tcp_nodelay    off;

    gzip                on;
    gzip_http_version    1.0;
    gzip_comp_level        2;
    gzip_proxied        any;
    gzip_types            text/plain text/css application/x-javascript
text/xml application/xml application/xml+rss text/javascript;

    upstream modperl {
        ip_hash;

        server 127.0.0.1:8080;
    }
    client_body_timeout 10;
    client_header_timeout 10;
client_max_body_size 3M;
    keepalive_timeout 10;
    send_timeout 10;
limit_conn_zone $binary_remote_addr zone=limit_per_ip:16m;

    # reserve 1MB under the name 'proxied' to track uploads
    upload_progress proxied 1m;
upload_progress_json_output;

    # HTTP Server
    server {
        listen       80;
        server_name  _;

        root /var/www/$host/;

limit_conn limit_per_ip 5;
proxy_buffering off;
## Only allow GET and HEAD request methods
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
   return 444;
}


        # Serve static files directly
        location ~*
^(?!\/(internal_documents)).+\.(jpg|jpeg|gif|css|js|ico|html|swf|png|pdf|xls|xlsx|doc|docx)$
{
                access_log        off;
                expires           30d;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

location / {
# needed to forward user's IP address to rails
proxy_set_header  X-Real-IP  $remote_addr;

# needed for HTTPS
proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_max_temp_file_size 0;
proxy_read_timeout    600;


# If the file exists as a static file serve it directly without
# running all the other rewite tests on it
if (-f $request_filename) {
   break;
}

proxy_pass http://modperl;
# track uploads in the 'proxied' zone
        # remember connections for 30s after they finished
        track_uploads proxied 30s;
}
location ^~ /progress {
        # report uploads tracked in the 'proxied' zone
        report_uploads proxied;
    }
    }

    # HTTPS server - Without SSL Certificate
    server {
        listen       442;
        server_name  _;
limit_conn limit_per_ip 5;
proxy_buffering off;
## Only allow GET and HEAD request methods
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
   return 444;
}
        server_name_in_redirect    off;

        ssl                  off;

        root /var/www/$host/;

        # serve static files directly
        location ~*
^(?!\/(internal_documents)).+\.(jpg|jpeg|gif|css|js|ico|html|swf|png|pdf|xls|xlsx|doc|docx)$
{
access_log        off;
expires           30d;
break;
        }

location / {
# needed to forward user's IP address to rails
proxy_set_header  X-Real-IP  $remote_addr;

# needed for HTTPS
proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_max_temp_file_size 0;
proxy_read_timeout    600;


# If the file exists as a static file serve it directly without
# running all the other rewite tests on it
if (-f $request_filename) {
   break;
}

proxy_pass http://modperl;
# track uploads in the 'proxied' zone
        # remember connections for 30s after they finished
        #track_uploads proxied 30s;
}
location ^~ /progress {
        # report uploads tracked in the 'proxied' zone
        report_uploads proxied;
    }

    }



}
Posted by Sokolov Evgeniy (Guest)
on 2012-12-14 09:15
(Received via mailing list)
> I can see the post variable X-Progress-ID coming with the upload
1. It must be not a "post variable" - it must be query variable.

For example:
<form action="/someaction?X-Progress-ID=uuid" method="post"
enctype="multipart/form-data">
<input type="file" ...
</form>

2. Did you try enable debug? What you have in logs related to
uploadprogress module?

2012/12/13 Matt M <h.dudeness@gmail.com>
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.