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