I'm building an nginx module and trying to create a post subrequest from the main request. The response from the main request buffers is saved to a nginx temp file and a post subrequest is created. The body of the post subrequest is from the nginx temp file instead of buffers.
``` ngx_http_request_t *sr; ngx_http_post_subrequest_t *ps; ps = ngx_palloc(r->pool, sizeof(ngx_http_post_subrequest_t)); if (ps == NULL) { ngx_log_stderr(0, "ngx_palloc failed"); return NGX_HTTP_INTERNAL_SERVER_ERROR; } //sub-request callback ps->handler = subrequest_done; ps->data = last_buf; ngx_http_test_conf_t *conf = ngx_http_get_module_loc_conf(r, ngx_http_test_filter_module); if (ngx_http_subrequest(r, &conf->test_location, NULL, &sr, ps, NGX_HTTP_SUBREQUEST_IN_MEMORY) != NGX_OK) { ngx_log_stderr(0, "failed to create subrequest"); return NGX_HTTP_INTERNAL_SERVER_ERROR; } ngx_str_t post_str = ngx_string("POST"); sr->method = NGX_HTTP_POST; sr->method_name = post_str; sr->request_body_in_file_only = 1; ngx_http_set_ctx(sr, ctx, ngx_http_test_filter_module); // Create request body and assign temp file sr->request_body = ngx_pcalloc(r->pool, sizeof(ngx_http_request_body_t)); if (sr->request_body == NULL) { ngx_log_stderr(0, "request body ngx_pcalloc failed"); return NGX_HTTP_INTERNAL_SERVER_ERROR; } sr->request_body->temp_file = ctx->temp_file; //sr->request_body->temp_file->offset = 0; (?) sr->header_only = 1; //sr->filter_need_in_memory = 1; sr->headers_in.content_length_n = ctx->file_size; ngx_log_stderr(0, "Created sub-request."); return NGX_OK; ``` However this does not send out the request body in the subrequest, the request gets stuck after finishing the handshake. If I use request buffers, it works fine. ``` sr->request_body->bufs->buf = payload_buf; sr->request_body->bufs->next = NULL; sr->request_body->buf = payload_buf; ``` Is there something I'm missing when using the temp file? I've verified the temp file is there and valid. Does anyone know if using a temp file is supported in post subrequest? or how else to achieve this. I was wondering if the post subrequest can stream the request body as new data is added to the temp file. Something like proxy buffering on, response buffers are added to temp file until the last one and the post subrequest keeps streaming the data from the tempfile. Cant use request buffers in the request body since I will run out of buffers after 64K, and the response can be larger than that. Posted at Nginx Forum: https://forum.nginx.org/read.php?2,290940,290940#msg-290940 _______________________________________________ nginx mailing list nginx@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx