Subrequest using Parent Request Body

Maxim Dounin mdounin at mdounin.ru
Thu May 13 01:22:30 MSD 2010


Hello!

On Wed, May 12, 2010 at 12:15:22PM -0700, Matthieu Tourne wrote:

[...]

> So the way I solved this is to make a full copy of r->request_body into
> temporary bufs of the subrequest.
> 
> I would create a subrequest using ngx_http_subrequest(),
> then use ngx_http_read_client_request_body(r, post_handler), to read
> r->request_body and set a  function to copy it in the subrquest as the
> post_handler.
> 
> I was wondering if this could be dangerous, if the subrequest could be fired
> before r->request_body would be completely read, or is it done in a
> sequential order ?

You have to read body and call ngx_http_subrequest() only when 
it's fully read (i.e. from post_handler).

> Concerning malloc, is :
> env MALLOC_OPTIONS=J;
> in nginx.conf sufficient ?

No.  Under FreeBSD nginx respects MALLOC_OPTIONS=J in environment 
and activates the same logic as with -DNGX_DEBUG_MALLOC, but it 
has to be already set at master process startup.

On other OSes the only available option is 
./configure --with-cc-opts="-D NGX_DEBUG_MALLOC".

> Also, is it possible to something such as Valgrind on nginx workers ?

Never tried.  Though you may disable daemon mode and master process 
completely with "daemon off; master_process off;".  This turns 
nginx into simple single-process programm which may be 
debugged/profiled by almost anything.  There are some limitations 
(reconfiguration and binary update doesn't work), but they are 
minimal.

Maxim Dounin



More information about the nginx mailing list