ПРОЕКТЫ 


  АРХИВ 


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 без backend



Верно, только тело запроса не будет полностью доступно через функцию 
request_body, потому что upload module не аккумулирует его в один буфер.

Возможно поможет приложенный патч.

----- Original Message -----
From: "Peter A Leonov" <gojpeg@xxxxxxxxx>
To: nginx-ru@xxxxxxxxx
Sent: Sunday, December 28, 2008 10:20:13 PM GMT +01:00 Amsterdam / Berlin / 
Bern / Rome / Stockholm / Vienna
Subject: Re: upload_module без backend 

Да, возможна.

Для этих целей подойдет встроенный перл. Достаточно попросить энжинкс  
принимать запрос в файл, и поставить простой обработчик локешна.

Потом его можно переместить, или оставить лежать так :)


С уважением,
Петр Леонов.

On 28.12.2008, at 22:17, renom renom77 <renom77@xxxxxxxxx> wrote:

> Понадобилось использовать модуль nginx_upload_module. Возможна ли в  
> данном случае конструкция nginx.conf без исползования proxy_pass? Ве 
> рнее, чтобы nginx сам обрабатывал запрос, не перенаправляя его бэкэн 
> ду(apache)?
> Подскажите, пожалуйста, конструкцию конфига в данном случае.
> -- 
> nginx/0.6.34
> nginx_upload_module-2.0.8
> Спасибо.
>

-- 
Regards,
Valery Kholodkov
diff -Naur nginx-0.7.27/src/http/modules/perl/nginx.xs 
nginx-0.7.27-rb/src/http/modules/perl/nginx.xs
--- nginx-0.7.27/src/http/modules/perl/nginx.xs 2008-09-05 16:48:47.000000000 
+0200
+++ nginx-0.7.27-rb/src/http/modules/perl/nginx.xs      2008-12-29 
10:49:08.000000000 +0100
@@ -386,6 +386,8 @@
     dXSTARG;
     ngx_http_request_t  *r;
     size_t               len;
+    ngx_chain_t          *cl;
+    u_char               *p;
 
     ngx_http_perl_set_request(r);
 
@@ -396,13 +398,33 @@
         XSRETURN_UNDEF;
     }
 
-    len = r->request_body->bufs->buf->last - r->request_body->bufs->buf->pos;
+    if (r->request_body->bufs->next == NULL) {
+        /* Request body is in a single buffer */
+        p = r->request_body->bufs->buf->pos;
+        len = r->request_body->bufs->buf->last - 
r->request_body->bufs->buf->pos;
+    }
+    else{
+        /* Request body is in a chain */
+        len = 0;
+
+        for(cl = r->request_body->bufs ; cl ; cl = cl->next)
+          len += (cl->buf->last - cl->buf->pos);
+
+        p = ngx_palloc(r->pool, len);
+
+        if (p == NULL) {
+            XSRETURN_UNDEF;
+        }
+
+        for(cl = r->request_body->bufs ; cl ; cl = cl->next)
+          p = ngx_cpymem(p, cl->buf->pos, cl->buf->last - cl->buf->pos);
+    }
 
     if (len == 0) {
         XSRETURN_UNDEF;
     }
 
-    ngx_http_perl_set_targ(r->request_body->bufs->buf->pos, len);
+    ngx_http_perl_set_targ(p, len);
 
     ST(0) = TARG;
 


 




Copyright © Lexa Software, 1996-2009.