ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: upload module 2.0.11



CyberDem0n пишет:
В модуле есть одна неприятная бага, которая тянется со времен обновления 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; то всё ОК.

Можно попробовать патч?

--
Best regards,
Valery Kholodkov
diff --git a/Changelog b/Changelog
index f6e3dbb..07fe6ca 100644
--- a/Changelog
+++ b/Changelog
@@ -1,4 +1,7 @@
 
+Version 2.0.12
+ * Fixed bug: keepalive connection was hanging after upload has been completed.
+
 Version 2.0.11
  * Fixed bug: rb->buf was uninitiazlied at some execution paths. Found by 
Andrew Filonov.
  * Fixed bug: dummy field would not appear whenever form contains only 
non-file fields.
diff --git a/ngx_http_upload_module.c b/ngx_http_upload_module.c
index 0512772..f711dce 100644
--- a/ngx_http_upload_module.c
+++ b/ngx_http_upload_module.c
@@ -719,6 +719,10 @@ static ngx_int_t 
ngx_http_upload_body_handler(ngx_http_request_t *r) { /* {{{ */
         ngx_sprintf(r->headers_in.content_length->value.data, "%O", 
r->headers_in.content_length_n)
             - r->headers_in.content_length->value.data;
 
+#if defined nginx_version && nginx_version >= 8011
+    r->main->count--;
+#endif
+
     if(uri->len != 0 && uri->data[0] == '/') {
         rc = ngx_http_internal_redirect(r, uri, &args);
     }
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.