autoindex module error handling

Joel Cunningham joel.cunningham at me.com
Tue Dec 15 15:11:19 UTC 2015


Maxim,

See responses in-line

Joel
 
On Dec 14, 2015, at 07:54 PM, Maxim Dounin <mdounin at mdounin.ru> wrote:

> Hello!
> 
> On Mon, Dec 14, 2015 at 11:23:26PM +0000, Joel Cunningham wrote:
> 
> Just a side note: sending html email with an empty text/plain
> alternative isn't a best way to ensure the message will be
> seen.

I checked the archive and see what you mean, are HTML formatted emails not supported or preferred for this mailing list?  I simply just sent an email from the iCloud mail client
 
> 
> 
>> Hi,
>> 
>> I'm seeing an issue with the autoindex module (version 1.9.5) where
>> when an error is encountered while generating the index, NGINX does not
>> send any response back to the client.
>> 
>> I ran through the debugging and what I found is that the header is
>> sent, but doesn't actually make it to the socket buffer because in
>> ngx_http_write_filter returns early because size <
>> clcf->postpone_output. This seemed normal to me.
>> 
>> Then during generation of the index, an error is encountered and
>> ngx_http_autoindex_error() is called. Since r->header_sent is 1,
>> NGX_ERROR is returned and the socket is closed without sending the
>> header or any additional error response
>> 
>> Chrome and Firefox end up displaying error pages about "no response" or
>> "the connection was reset" when TCP connection was closed without a
>> response.
>> 
>> Should NGINX be doing something better? Since the response is chunk
>> encoded, I understand the header is already sent, but is there a better
>> way to report errors while generating a chunked response? (although
>> autoindex doesn't seem to actually generate multiple chunks).
> 
> As long as the header is sent, it's already too late to do 
> anything with the response or otherwise indicate an error to the 
> client. So we have two basic options to handle errors which 
> happen after the header is send:
> 
> 1) generate the response, ignoring/handling errors somehow;
> 
> 2) terminate the connection.
> 
> Depending on a particular error approach (1) may or may not be 
> possible. E.g., SSI module handles cases when subrequests to 
> other resources fail. But if memory allocation fails, likely it 
> won't be possible to "handle" it somehow. The default behaviour 
> is (2), as it's always possible. And that's what happens in this 
> particular case. If you think that (1) is possible for the 
> particular error you've seen, and it worth the effort - feel free 
> to provide patches.
> 

This makes sense, thanks for explaining the error handling.  I’m still fairly new to the NGINX source and this is helpful to know!  The only other thought I had was that we could send an empty chunked body when an error is encountered since the auto index module only sends a single chunk.  I think the value of this is questionable though since the client learns of the error anyways though the connection closing without a response.

> -- 
> Maxim Dounin
> http://nginx.org/
> 
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel



More information about the nginx-devel mailing list