nginx tempfiles

Maxim Dounin mdounin at
Fri Aug 29 13:26:59 UTC 2014


On Fri, Aug 29, 2014 at 01:51:55AM +0100, Nick Kew wrote:

> I have a filter that may want to rewrite request bodies.
> Stream-editing an nginx chain is straightforward enough
> (the equivalent output filter works fine).
> But as I understand it, I need to cater for a case where
> a request body is in r->request_body->temp_file.
> Assuming it's there for a reason, I thought the least-bad
> approach would be to stream-edit it to another tempfile
> and switch r->request_body->temp_file to that.
> However, that approach appears to be pushing against
> nginx's tempfile handling, from the moment I look at
> ngx_create_temp_file and realise the amount of preparation
> required to set up a path and file before calling it.
> Will Bad Things happen if I simplify by using a system
> call like mkstemp and then just substitute file->fd
> in nginx's temp_file struct?

This will likely break client_body_in_file_only, see  Not to mention that 
mkstemp() won't work on win32, and you'll have to unlink files 
yourself then.

In either case, you may want to consider using request body 
filters instead, as recently discussed here:

Reading and then writing temorary files will be suboptimal.  And 
replacing r->request_body->temp_file, even if you'll be able to do 
it properly, will likely result in your module being broken during 
further nginx development.

Maxim Dounin

More information about the nginx-devel mailing list