processing request body in files
jefftk at google.com
Mon Aug 11 13:35:11 UTC 2014
On Fri, Aug 8, 2014 at 12:42 PM, Maxim Dounin <mdounin at mdounin.ru> wrote:
> On Fri, Aug 08, 2014 at 10:44:59AM -0400, Jeff Kaufman wrote:
>> In ngx_pagespeed we want to handle POSTs, processing them in our nginx
>> module and performing an action. This works fine for small POSTs, but
>> if they're too big then r->request_body->temp_file is set and the data
>> isn't available in memory. Right now we just log an error, but I'd
>> like to fix this.
>> To read from that file, is it safe to just call
>> ngx_open_tempfile(r->request_body->temp_file->file.name, ...) and then
>> ngx_read_file() until that returns 0 for EOF (like standard unix) or
>> an error? Or is there something more complex we need to do?
>> (I've looked for existing modules that do this, but haven't found any.
>> I'm not finding any modules that currently do that; just ones that
>> issue a rename command to move r->request_body->temp_file into the
>> final destination.)
> The modules which read request body from a file don't do this via
> a file name (in most cases, there is no name at all, as temporary
> files are unlink()'ed after they are open), but rather through
> already opened file descriptor. E.g., upstream does this (using
> output chain) to send a request body to a backend server.
> In either case, reading temporary files might be suboptimal - you
> may consider using request body filters instead, an experimental
> patch can be found, e.g., here:
> Maxim Dounin
> nginx-devel mailing list
> nginx-devel at nginx.org
More information about the nginx-devel