<div dir="ltr"><span style="font-size:12.800000190734863px">Hi,</span><div style="font-size:12.800000190734863px">I am trying to send a custom response in my module when I encounter a request for a specific location. For example, I have setup my location as follows:</div><div style="font-size:12.800000190734863px"><br></div><div style="font-size:12.800000190734863px"><div><font face="monospace, monospace">  server {</font></div><div><font face="monospace, monospace">    listen 9999;</font></div><div><font face="monospace, monospace">      location /__my_module {</font></div><div><font face="monospace, monospace">      set_mymodule_location;</font></div><div><font face="monospace, monospace">      log_not_found off;</font></div><div><font face="monospace, monospace">    }<br></font></div><div><font face="monospace, monospace">  }</font></div></div><div style="font-size:12.800000190734863px"><br></div><div style="font-size:12.800000190734863px">In my location handler, I am trying to respond to a request for this location. I get the response I expect at the client. However, I am seeing the following error message logged in error.log:</div><div style="font-size:12.800000190734863px"><br></div><div style="font-size:12.800000190734863px"><font face="monospace, monospace">2018/05/16 00:38:07 [alert] 225#225: *158 header already sent, client: 127.0.0.1, server: , request: "GET /__my_module HTTP/1.1", host: "localhost:9999"<br></font></div><div style="font-size:12.800000190734863px"><br></div><div style="font-size:12.800000190734863px">Can someone let me know how I can prevent this error from showing up. Also, the return value from ngx_http_send_header is always an NGX_ERROR. Not sure why...</div><div style="font-size:12.800000190734863px"><br></div><div style="font-size:12.800000190734863px">FWIW, my response buffer is always less than 512 bytes. My code is included at the end of this email. Any help is appreciated. Thanks<br></div><div style="font-size:12.800000190734863px"><br></div><div style="font-size:12.800000190734863px">Dk.</div><div style="font-size:12.800000190734863px"><br></div><div style="font-size:12.800000190734863px"><div><font face="monospace, monospace">int</font></div><div><font face="monospace, monospace">SendResponse(ngx_http_request_<wbr>t *r, ngx_uint_t http_status,</font></div><div><font face="monospace, monospace">             const char *data, unsigned int dlen)</font></div><div><font face="monospace, monospace">{</font></div><div><font face="monospace, monospace">  ngx_buf_t *buf = ngx_create_temp_buf(r->pool, 512);</font></div><div><font face="monospace, monospace"><br></font></div><div><div><font face="monospace, monospace">  if (NULL == buf) {</font></div><div><font face="monospace, monospace">    ngx_log_error(NGX_LOG_ERR, log, 0,</font></div><div><font face="monospace, monospace">                  "allocation failure");</font></div><div><font face="monospace, monospace">    return NGX_HTTP_INTERNAL_SERVER_ERROR<wbr>;</font></div><div><font face="monospace, monospace">  }</font></div><div><font face="monospace, monospace"><br></font></div></div><div><font face="monospace, monospace">  buf->last = ngx_copy(buf->start, (unsigned char*) data, dlen);</font></div><div><div><font face="monospace, monospace">  ngx_log_t *log = r->connection->log;</font></div><div><font face="monospace, monospace"><br></font></div><div><span style="font-family:monospace,monospace">  ngx_chain_t *out_chain = ngx_alloc_chain_link(r->pool);</span></div><div><font face="monospace, monospace">  if (NULL == out_chain) {</font></div><div><font face="monospace, monospace">    ngx_log_error(NGX_LOG_ERR, log, 0,</font></div><div><font face="monospace, monospace">                  "failed to alloc buffer chain");</font></div><div><font face="monospace, monospace">    return NGX_HTTP_INTERNAL_SERVER_ERROR<wbr>;</font></div><div><font face="monospace, monospace">  }</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">  out_chain->buf = buf;</font></div><div><font face="monospace, monospace">  out_chain->next = NULL;</font></div><div><font face="monospace, monospace">  buf->last_buf = 1;</font></div><div><font face="monospace, monospace">  buf->last_in_chain = 1;</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">  ngx_int_t rc;</font></div><div><font face="monospace, monospace">  r->headers_out.status = http_status;</font></div><div><font face="monospace, monospace">  r->headers_out.content_length_<wbr>n = buf->last - buf->start;</font></div><div><font face="monospace, monospace">  r->headers_out.content_type.le<wbr>n = sizeof("text/plain") - 1;</font></div><div><font face="monospace, monospace">  r->headers_out.content_type.da<wbr>ta = (u_char *) "text/plain";</font></div><div><font face="monospace, monospace">  rc = ngx_http_send_header(r);</font></div></div><div><font face="monospace, monospace"><br></font></div><div><div><font face="monospace, monospace">#if 0 // send_header always returns NGX_ERROR.</font></div><div><font face="monospace, monospace">  if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) {</font></div><div><font face="monospace, monospace">    ngx_log_error(NGX_LOG_ERR, log, 0,</font></div><div><font face="monospace, monospace">                  "send header failed. rc=%i", rc);</font></div><div><font face="monospace, monospace">    return NGX_HTTP_INTERNAL_SERVER_ERROR<wbr>;</font></div><div><font face="monospace, monospace">  }</font></div><div><font face="monospace, monospace">#endif</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">  rc = ngx_http_output_filter(r, out_chain);</font></div><div><font face="monospace, monospace">  if (rc != NGX_OK) {</font></div><div><font face="monospace, monospace">    ngx_log_error(NGX_LOG_ERR, log, 0,</font></div><div><font face="monospace, monospace">                  "send response buffer failed. rc=%i", </font><span style="font-family:monospace,monospace">rc);</span></div><div><font face="monospace, monospace">    return NGX_HTTP_INTERNAL_SERVER_ERROR<wbr>;</font></div><div><font face="monospace, monospace">  }</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">  return 0;</font></div></div><div><font face="monospace, monospace">}</font></div><div><font face="monospace, monospace"><br></font></div></div></div>