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/ _______________________________________________ nginx-devel mailing list [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-devel
