子请求不发送或请求挂起

我试图用C编写我自己的模块(它必须是C),Nginx 1.7.12。 当代理请求到达Nginx时,它意味着发送额外的请求到另一台服务器。

为此,我在config中创build了两个位置:

location = / { proxy_pass $backend_url; } location /internal_url { proxy_pass $log_server_url; internal; } 

我用这里的例子来创build一个如下所示的filter:

 static ngx_int_t my_http_body_filter(ngx_http_request_t* r, ngx_chain_t* in) { int rc; ngx_str_t uri = SOME_INTERNAL_URI; ngx_http_request_t *sr; rc = ngx_http_next_body_filter(r, in); if (rc == NGX_ERROR) return rc; return ngx_http_subrequest(r, &uri, NULL /* args */, &sr, NULL /* callback */, 0 /* flags */); } 

起初,这似乎是从不发送子请求。 我已经尝试了NGX_AGAINNGX_AGAIN subrequest->done但是我只能使请求挂起。

然后,事实certificate,subrequests,实际上,发送(所以configuration是好的),当我添加return NGX_AGAIN; ,之后调用ngx_http_subrequest

不幸的是,原来的请求永远不会结束。

这应该怎么做?

可能这会工作吗?

 static ngx_int_t my_http_body_filter(ngx_http_request_t* r, ngx_chain_t* in) { int rc; ngx_str_t uri = SOME_INTERNAL_URI; ngx_http_request_t *sr; if (r != r->main) { /* subrequest */ return ngx_http_next_body_filter(r, in); } return ngx_http_subrequest(r, &uri, NULL /* args */, &sr, NULL /* callback */, 0 /* flags */); } 

更新:

经过一番调查,这是一个新的版本: 要点

不幸的是,我现在没有机会测试我的代码。

更新

上面的代码收到全身发送子请求。 另一种可能的方法是在上下文中首先发送它并存储标志。