Hello world upload_module adds 2 sec delay to file uploads

jack nginx-forum at nginx.us
Mon Jun 22 23:13:51 MSD 2009

Uploading a small "hello world" file using upload_module takes about 2 seconds, while not using upload_module and passing it directly to my fastcgi is almost instantaneous.  To debug the problem I modified the upload_module code and added a debug statement at the end of function ngx_http_upload_handler, and another at the beginning of the function ngx_http_read_upload_client_request_body_handler.

Using nginx_upload_module-2.0.9

2009/06/22 12:02:56  16737#0: *1 returning ok in ngx_http_upload_handler, client:, server: myhost.com, request: "POST /upload/this HTTP/1.1", host: "localhost:81"
2009/06/22 12:02:58  16737#0: *1 67964 begin ngx_http_read_upload_client_request_body_handler , client:, server: myhost.com, request: "POST /upload/this HTTP/1.1", host: "localhost:81"

Notice the 2 second delay between those calls.  Are there other settings I could tweak to get that 2 second delay down?

Here is my nginx.conf

user  www www;
worker_processes  5;
worker_rlimit_nofile 8192;
error_log  logs/error.log  info;
pid        logs/nginx.pid;
events {
    worker_connections  2000;
http {
    include       mime.types; # Default for now
    default_type  application/octet-stream;
    access_log  logs/access.log;
    sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  65;
    upstream upload_workers {
      server localhost:2121;
      server localhost:2122;
      server localhost:2123;
      server localhost:2124;
    server {
        listen       81;
        location /upload {
             # This needs to remain large
            client_max_body_size 1000M;
            upload_pass   @upload_taker;
            upload_store /tmp;
            upload_store_access user:rw group:rw all:rw;
            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";
            # Integrity checking.  Optional.
#            upload_aggregate_form_field "$upload_field_name.md5" "$upload_file_md5";
#            upload_aggregate_form_field "$upload_field_name.size" "$upload_file_size";
            upload_cleanup 400 404 499 500-505;
        # Pass altered request body to a backend
        location @upload_taker {
          include fastcgi_params;
          fastcgi_pass upload_workers;
        location / {
          index index.html;
        error_page  404              /404.html;


To post to nginx, I'm using
echo "Hello world" > /tmp/hworld
curl -F 'file1=@/tmp/hworld' 'localhost:81/upload/this'

Thanks for any help!

Posted at Nginx Forum: http://forum.nginx.org/read.php?2,3264,3264#msg-3264

More information about the nginx mailing list