upload module 2.0.11

CyberDem0n nginx-forum at nginx.us
Tue Nov 24 15:51:37 MSK 2009


В модуле есть одна неприятная бага, которая тянется со времен обновления API в nginx-0.8.11.
Если  keepalive_timeout > 0, то после аплоада перестают обрабатываться любые запросы.

Теперь расскажу как повторить подобное поведение.

/* nginx.conf */
user nginx nginx;                                                                                                                           
worker_processes 1;                                                                                                                         

error_log /var/log/nginx/error_log info;

events {
        worker_connections  8192;
        use epoll;
}

http {
        include         /etc/nginx/mime.types;
        default_type    application/octet-stream;

        client_header_timeout   10m;
        client_body_timeout     10m;
        send_timeout            10m;

        connection_pool_size            256;
        client_header_buffer_size       1k;
        large_client_header_buffers     4 2k;
        request_pool_size               4k;

        output_buffers  1 32k;
        postpone_output 1460;

        sendfile        on;
        tcp_nopush      on;
        tcp_nodelay     on;

        keepalive_timeout       75 20;

        server {
                listen          127.0.0.1;
                server_name     localhost;

                root /var/www;

                location /example.php {
                        if ($request_method = "GET") {
                                proxy_pass http://localhost:8080;
                                break;
                        }
                        upload_pass   @test;
                        upload_store /tmp;
                        upload_store_access user:r;
                        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";
                        upload_pass_form_field "^submit$|^description$";
                        upload_cleanup 400 404 499 500-505;
                }

                location @test {
                        proxy_pass   http://localhost:8080;
                }
        }
}

_________________________________________________________________________
--- nginx_upload_module-2.0.11/example.php      2009-11-18 18:19:10.000000000 +0300
+++ example.php 2009-11-24 15:19:51.312792765 +0300
@@ -28,10 +28,11 @@
        }

     echo "";
+    echo "setTimeout('location.href=\"/example.php\"', 1000);";

 }else{?>
 Select files to upload
-
+
 
 
 
______________________________________________________________________________

+ Апач со стандартными настройками на порту 8080



Смысл в следующем, сразу после аплоада example.php показывает табличку, и потом через секунду выполняет при помощи javascript "редирект" на себя-же (чтобы опять показать форму).

Так вот, в этом "редиректе" страница example.php не загружается. При этом браузере запрос как-бы "залипает". То есть браузер показывает что пытается загрузить страницу, но результата дождаться за какое-либо разумное время невозможно.

Если-же указать keepalive_timeout 0; то всё ОК.

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,25139,25286#msg-25286




More information about the nginx-ru mailing list