header already sent

Maxim Dounin mdounin at mdounin.ru
Fri Jul 6 01:38:46 UTC 2018


Hello!

On Thu, Jul 05, 2018 at 05:44:00PM -0700, Dk Jack wrote:

> Hi,
> I have an nginx module. The purpose of my module is to inspect every
> request and make a binary decision (i.e drop or allow). When dropping, I am
> sending a custom status code and response message. I've setup my module
> handler to be called in the NGX_HTTP_REWRITE_PHASE. Things seem to be
> working fine for the most part except for a small issue.
> 
> I am seeing 'header already sent' messages in the nginx error.log. In my
> handler, I create a context for my module and attach it request using
> the ngx_http_set_ctx call. I am using the context to store some info and
> also to prevent my module from processing the same request multiple times.
> My module processes the request only once.
> 
> I get the 'header already sent' message only for a fraction of the
> requests. The messages seem to be generated only for requests that I
> allowed in my module. In my module handler, I return an NGX_DECLINED return
> code when I allow a request. The message is not generated for every allowed
> request but only for some of the allowed requests. When the error is
> generated it is always for POST request and not all POST requests cause
> this error message to be logged.
> 
> Could someone explain what could be going on here or where I should look at
> next to debug this further? Any pointers are appreciated. Thanks.

The "header already sent" alert indicate that there is a serious 
bug somewhere, resulting in an attempt to send a response header 
second time.

If you see it for POST requests handled by your module, it likely 
means that you are handling requests with bodies incorrectly. 

-- 
Maxim Dounin
http://mdounin.ru/


More information about the nginx-devel mailing list