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
|