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;
|