Error handling from filter modules

Maxim Dounin mdounin at mdounin.ru
Fri Oct 16 12:20:05 UTC 2015


Hello!

On Fri, Oct 16, 2015 at 02:36:13AM +0100, Steven Hartland wrote:

> I'm making changes to a filter module and when it detected an error it
> returned NGX_ERROR however the response generated to the client isn't
> the expected 500 internal server error I would have expected given said
> return.
> 
> So the question is do filters have to manually call
> ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); or is it
> expected that the upper layers should actually do the right thing and
> ensure the client doesn't get a bad response generated from the current
> state of r with no indication an error occurred?

In filters, it's already to late to return anything in case of 
errors.  In body filters, it's way too late - the response was 
already partially sent.  And in header filters there is a chance that 
other filters allocated something response-specific, and an 
attempt to return a different response will break things.  So, 
when you return NGX_ERROR from a filter, the connection is just 
closed.

If you absolutely must return an error from a filter - like, e.g., 
not modified filter do for 416 responses - there is a special 
function to do this, ngx_http_filter_finalize_request().  It's 
very fragile though, and I wouldn't recommend using it unless you 
are sure you must do it.

-- 
Maxim Dounin
http://nginx.org/



More information about the nginx-devel mailing list