Welcome! Log In Create A New Profile

Advanced

error ngx_http_send_header

May 16, 2018 01:04PM
Hi,
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:

server {
listen 9999;
location /__my_module {
set_mymodule_location;
log_not_found off;
}
}

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:

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"

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...

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

Dk.

int
SendResponse(ngx_http_request_t *r, ngx_uint_t http_status,
const char *data, unsigned int dlen)
{
ngx_buf_t *buf = ngx_create_temp_buf(r->pool, 512);

if (NULL == buf) {
ngx_log_error(NGX_LOG_ERR, log, 0,
"allocation failure");
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}

buf->last = ngx_copy(buf->start, (unsigned char*) data, dlen);
ngx_log_t *log = r->connection->log;

ngx_chain_t *out_chain = ngx_alloc_chain_link(r->pool);
if (NULL == out_chain) {
ngx_log_error(NGX_LOG_ERR, log, 0,
"failed to alloc buffer chain");
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}

out_chain->buf = buf;
out_chain->next = NULL;
buf->last_buf = 1;
buf->last_in_chain = 1;

ngx_int_t rc;
r->headers_out.status = http_status;
r->headers_out.content_length_n = buf->last - buf->start;
r->headers_out.content_type.len = sizeof("text/plain") - 1;
r->headers_out.content_type.data = (u_char *) "text/plain";
rc = ngx_http_send_header(r);

#if 0 // send_header always returns NGX_ERROR.
if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) {
ngx_log_error(NGX_LOG_ERR, log, 0,
"send header failed. rc=%i", rc);
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
#endif

rc = ngx_http_output_filter(r, out_chain);
if (rc != NGX_OK) {
ngx_log_error(NGX_LOG_ERR, log, 0,
"send response buffer failed. rc=%i", rc);
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}

return 0;
}
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

error ngx_http_send_header

dnj0496 788 May 16, 2018 01:04PM

Re: error ngx_http_send_header

Ranier Vf 440 May 16, 2018 01:24PM

Re: error ngx_http_send_header

Maxim Dounin 381 May 16, 2018 03:12PM

Re: error ngx_http_send_header

dnj0496 556 May 16, 2018 04:08PM

Re: error ngx_http_send_header

tokers 466 May 16, 2018 10:30PM

Re: error ngx_http_send_header

Maxim Dounin 396 May 17, 2018 09:14AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 261
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready