【发布时间】:2015-05-25 18:52:30
【问题描述】:
我正在尝试用 C(必须是 C)为 Nginx 1.7.12 编写我自己的模块。 当代理请求到达 Nginx 时,它会向另一台服务器发送额外的请求。
为此,我在配置中创建了两个位置:
location = / {
proxy_pass $backend_url;
}
location /internal_url {
proxy_pass $log_server_url;
internal;
}
我使用了来自 here 的示例来创建如下所示的过滤器:
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_AGAIN 和subrequest->done,但我只能让请求挂起。
然后,当我在ngx_http_subrequest 调用之后添加return NGX_AGAIN; 时,实际上发送了子请求(所以配置是OK 的)。
很遗憾,原来的请求永远不会完成。
这应该怎么做?
【问题讨论】:
-
你的 uri 是否匹配 nginx.conf 中的任何位置?如果我理解你的配置,它应该是'/internal_url'。
-
@Alexander Altshuler:匹配,(类似于“/internal_url/subpage”)